আমি কীভাবে অন্তর্নির্মিত পাসওয়ার্ড পুনরায় সেট করতে / নিজের টেম্পলেটগুলির সাথে দর্শন পরিবর্তন করতে পারি


93

উদাহরণ হিসেবে বলা যায় আমি নির্দেশ করতে পারেন url '^/accounts/password/reset/$'করার django.contrib.auth.views.password_resetপ্রেক্ষাপটে আমার টেমপ্লেটের ফাইলের নাম কিন্তু আমি আরও বেশি প্রসঙ্গ বিবরণ পাঠাতে হবে মনে করি।

পাসওয়ার্ড পুনরায় সেট করতে এবং মতামত পরিবর্তন করতে প্রত্যেকের জন্য ঠিক কী প্রসঙ্গ যুক্ত করতে হবে তা আমার জানতে হবে।


4
এই প্রশ্নের শিরোনাম দেওয়া আমি মনে করি না যে contextআপনি সঠিক জিনিসটি সন্ধান করছেন!
জেবি।

4
কেবলমাত্র "প্রসঙ্গ" দ্বারা নিশ্চিত করার জন্য আমি অতিরিক্ত ডেটার ডিকশনারি বলতে চাইছি যা ইউআরএল লাইনের 3 য় আর্গুমেন্ট। ওরফে অতিরিক্ত ডেটা বা কোয়ার্গেস । বিভ্রান্তির জন্য দুঃখিত, দয়া করে প্রশ্নটি সম্পাদনা করুন, যে কেউ পারেন।
টম ভিনার

উত্তর:


100

আপনি django.contrib.auth.views.password_reset এর উত্সগুলিতে একবার নজর রাখলে আপনি দেখতে পাবেন যে এটি ব্যবহার করে RequestContext। আপশটটি হ'ল, আপনি প্রসঙ্গটি সংশোধন করতে কনটেক্সট প্রসেসর ব্যবহার করতে পারেন যা আপনাকে প্রয়োজনীয় তথ্য ইনজেকশনের অনুমতি দিতে পারে।

বি-তালিকার প্রসঙ্গ প্রসেসরগুলির একটি ভাল ভূমিকা রয়েছে

সম্পাদনা (আসল প্রশ্নটি কী তা সম্পর্কে আমি বিভ্রান্ত হয়ে পড়েছি বলে মনে হয়):

আপনি লক্ষ্য করবেন যে password_resetনামক একটি প্যারামিটার বলে template_name:

def password_reset(request, is_admin_site=False, 
            template_name='registration/password_reset_form.html',
            email_template_name='registration/password_reset_email.html',
            password_reset_form=PasswordResetForm, 
            token_generator=default_token_generator,
            post_reset_redirect=None):

আরও তথ্যের জন্য পাসওয়ার্ড_সেট পরীক্ষা করুন।

... এইভাবে, url.py এর মতো:

from django.conf.urls.defaults import *
from django.contrib.auth.views import password_reset

urlpatterns = patterns('',
     (r'^/accounts/password/reset/$', password_reset, {'template_name': 'my_templates/password_reset.html'}),
     ...
)

django.contrib.auth.views.password_resetমূলশব্দ '/accounts/password/reset'যুক্তিটির সাথে মিলে যাওয়া URL গুলির জন্য ডাকা হবে template_name = 'my_templates/password_reset.html'

অন্যথায়, password_resetভিউটি নিজের যত্ন নেয় বলে আপনাকে কোনও প্রসঙ্গ সরবরাহ করার দরকার নেই । আপনি যদি কী প্রসঙ্গ উপলব্ধ তা দেখতে চান, আপনি একটি TemplateSyntaxত্রুটি ট্রিগার করতে পারেন এবং স্ট্যাক ট্রেসের সাহায্যে স্থানীয় একটি ভেরিয়েবল নামের ফ্রেমটি সন্ধান করতে পারেন context। আপনি যদি প্রসঙ্গটি সংশোধন করতে চান তবে প্রসঙ্গে প্রসেসরগুলি সম্পর্কে আমি উপরে যা বলেছিলাম সম্ভবত এটি যাওয়ার উপায়।

সংক্ষিপ্তসার: আপনার নিজের টেমপ্লেটটি ব্যবহার করার জন্য আপনাকে কী করতে হবে? template_nameযখন ডাকা হয় তখন দর্শনে একটি কীওয়ার্ড আর্গুমেন্ট সরবরাহ করুন । আপনি কোনও ইউআরএল প্যাটার্ন টিপলের তৃতীয় সদস্য হিসাবে অভিধানকে অন্তর্ভুক্ত করে দর্শনে কীওয়ার্ড আর্গুমেন্ট সরবরাহ করতে পারেন।


আমি বিশ্বাস করি প্রশ্নটি বিল্টিন ভিউ সহ বিভিন্ন টেম্পলেট ব্যবহার করার বিষয়ে - প্রসঙ্গত প্রসেসরগুলি এতে ফ্যাক্টর করে না!
জেবি।

6
কোন ধারণা, কিভাবে যাক registration/password_reset_email.htmlআসলে মত HTML উপাদানগুলি রয়েছে: <div>, <a>কারণ এই পাঠায় শুধুমাত্র পাঠ্য
mabdrabo

@ মাবদ্রোবো - এইচটিএমএল কীভাবে কাজ করবেন সে সম্পর্কে এই নিবন্ধটি দেখুন
গ্রেগলটসভ

26

দৃ article়ভাবে এই নিবন্ধটি সুপারিশ।

আমি কেবল এটি প্লাগ ইন করেছি এবং এটি কাজ করে

http://garmoncheg.blogspot.com.au/2012/07/django-resetting-passwords-with.html


4
দুর্দান্ত লিঙ্ক, ধন্যবাদ। যারা লিঙ্কটি অনুসরণ করছেন তাদের জন্য - জাঙ্গো-নিবন্ধকরণে এখন ডিফল্ট প্রমাণীকরণের দর্শন অন্তর্ভুক্ত রয়েছে ... সুতরাং আপনাকে যা করতে হবে তা হল উপরের লিঙ্কটিতে বিশদ টেমপ্লেটগুলি তৈরি করা। এছাড়াও - যদি আপনি পাশাপাশি সমস্ত ম্যানুয়াল এইচটিএমএল ফর্মের কাজ এড়াতে চান তবে জাঙ্গো-ক্রিস্পি-ফর্মগুলি ব্যবহার করুন।
ডুগভেকে

কাজের জায়গায় আমাকে পরিচালনা করতে হবে এমন কিছু লিগ্যাসি জ্যাঙ্গো কোড রয়েছে তবে ফ্রেমওয়ার্ক সম্পর্কে আমি সবেমাত্র কিছু জানি। লোকটি আমার পাছা বাঁচিয়েছে! দুর্দান্ত টিউটোরিয়াল
ম্যাট ভুকাস

লিঙ্কের জন্য ধন্যবাদ! আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত যেহেতু আপনি যেমন বলেছিলেন, এটিকে প্লাগ ইন করুন এবং এটি কার্যকর হয়েছে।
ইহাতেচে

10

আপনার কেবলমাত্র বিদ্যমান ফাংশনগুলি মোড়ানো এবং আপনার পছন্দ মতো টেম্পলেটটি পাস করতে হবে। উদাহরণ স্বরূপ:

from django.contrib.auth.views import password_reset

def my_password_reset(request, template_name='path/to/my/template'):
    return password_reset(request, template_name)

এটি দেখতে দর্শনগুলির মধ্যে অন্তর্নির্মিত ফাংশন ডিক্লারেশনটি একবার দেখুন:

http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L74


4
এটি করার সহজ উপায় নয়। আপনি কোনও ইউআরএল নিদর্শনগুলির তৃতীয় অংশ হিসাবে অভিধানে পাস করতে পারেন বা যদি আপনার মনে হয় যে আপনাকে অবশ্যই ফাংশনটি গুটিয়ে রাখতে হবে, আপনি ব্যবহার করতে পারেন: পাসওয়ার্ড_সেট = ফান্টুলস. পার্টিশিয়াল (পাসওয়ার্ড, টেম্পলেট_নাম = "পথ / থেকে / আমার / টেম্পলেট") )
হারুন মেনপা

7

আপনি নিম্নলিখিতটি করতে পারেন:

  1. আপনার urlpatterns (r '^ / অ্যাকাউন্ট / পাসওয়ার্ড / রিসেট / $', পাসওয়ার্ড_সেট) যুক্ত করুন
  2. আপনার টেম্পলেটটি '/templates/regifications/password_reset_form.html' তে রাখুন
  3. আপনার অ্যাপ্লিকেশনটিকে INSTALLED_APPS এ 'django.contrib.auth' এর আগে আসুন

ব্যাখ্যা:

টেমপ্লেটগুলি লোড হয়ে গেলে সেটিংগুলিতে আপনার INSTALLED_APPS পরিবর্তনশীলটিতে অনুসন্ধান করা হয়। অর্ডারটি INSTALLED_APPS এ সংজ্ঞা র‌্যাঙ্ক দ্বারা নির্ধারিত হয়, সুতরাং আপনার অ্যাপ্লিকেশনটি 'django.contrib.auth' এর আগে আসার পরে আপনার টেম্পলেটটি লোড হয়ে গেছে (রেফারেন্স: https://docs.djangoproject.com/en/dev/ref/templates/api /#django.template.loaders.app_directories.Loader )।

পদ্ধতির প্রেরণা:

  1. আমি আরও শুকনো থাকতে চাই এবং টেমপ্লেটের নাম (জ্যাঙ্গো দ্বারা সংজ্ঞায়িত) কোনও দর্শনের জন্য পুনরাবৃত্তি করব না (তারা ইতিমধ্যে জাজানোতে সংজ্ঞায়িত হয়েছে)
  2. আমি একটি ক্ষুদ্রতম url.py চাই

2

আর একটি, সম্ভবত সহজ সমাধানটি হ'ল সেটিংস.পিটিতে TEMPLATES সেটিংয়ের DIRS এন্ট্রিতে আপনার ওভাররাইড টেম্পলেট ডিরেক্টরিটি যুক্ত করা। (আমি মনে করি জ্যাঙ্গো ১.৮ এ এই সেটিংটি নতুন। এটি পূর্ববর্তী জ্যাঙ্গো সংস্করণগুলিতে TEMPLATE_DIRS নামে পরিচিত হতে পারে))

তাই ভালো:

TEMPLATES = [
   {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # allow overriding templates from other installed apps                                                                                                
        'DIRS': ['my_app/templates'],
        'APP_DIRS': True,
}]

তারপরে আপনার ওভাররাইড টেম্পলেট ফাইলগুলিকে নীচে রাখুন my_app/templates। সুতরাং ওভাররাইড হওয়া পাসওয়ার্ড রিসেট টেম্পলেট হবেmy_app/templates/registration/password_reset_form.html


1

ডকুমেন্টেশন বলছেন যে শুধুমাত্র একটি প্রসঙ্গ পরিবর্তনশীল, form

আপনার যদি লগইন নিয়ে সমস্যা হয় (যা সাধারণ), ডকুমেন্টেশনটিতে তিনটি প্রসঙ্গ ভেরিয়েবল রয়েছে:

  • form: লগইন ফর্ম উপস্থাপন করে এমন একটি ফর্ম অবজেক্ট। ফর্ম অবজেক্টের জন্য আরও ফর্মের ডকুমেন্টেশন দেখুন।
  • next: সফল লগইনের পরে পুনর্নির্দেশ করার URL টি। এটিতেও ক্যোরির স্ট্রিং থাকতে পারে।
  • site_name: SITE_ID সেটিং অনুসারে বর্তমান সাইটের নাম।

4
ডকুমেন্টেশন বলছে যে এখানে "templateচ্ছিক যুক্তি" "টেমপ্লেট_নাম" বলা হয় যা আরও প্রাসঙ্গিক বলে মনে হয়।
জেবি।

Alচ্ছিক আর্গুমেন্টটি ফাংশনের পক্ষে যুক্তি, ফর্মটিকে সরবরাহ করা হয়নি।
এস। লট

মিম- আমি মনে করি যে প্রশ্নটি বিভ্রান্তিকর কারণ এটি 'প্রসঙ্গে' কথা বলে যখন সত্যই এটি সমাধানের জন্য প্রাসঙ্গিক সমস্ত password_resetদৃষ্টিভঙ্গির যুক্তি ments
জেবি।

1

আমি এই দুটি লাইনটি ইউআরএল এবং টেম্পলেটটি অ্যাডমিনের কাছ থেকে আমি কীভাবে আমার প্রয়োজনে পরিবর্তন করছি তা ব্যবহার করছি

url(r'^change-password/$', 'django.contrib.auth.views.password_change', {
    'template_name': 'password_change_form.html'}, name="password-change"),
url(r'^change-password-done/$', 'django.contrib.auth.views.password_change_done', {
    'template_name': 'password_change_done.html'
    }, name="password-change-done")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.