2011-02-02 17 views
26

लॉगिन के बाद डिफ़ॉल्ट रूप से django उपयोगकर्ता को किसी खाते/प्रोफाइल पेज पर रीडायरेक्ट करता है या यदि आप LOGIN_REDIRECT_URL को संपादित करते हैं तो आप उपयोगकर्ता को दूसरे पृष्ठ पर भेज सकते हैं आप settings.py में निर्दिष्ट करते हैं।Django - लॉगिन के बाद, उपयोगकर्ता को अपने कस्टम पेज पर रीडायरेक्ट करें -> mysite.com/username

यह बहुत अच्छा है, लेकिन मैं उपयोगकर्ता को (लॉगिन के बाद) एक कस्टम पेज पर रीडायरेक्ट करना चाहता हूं, जहां उस पृष्ठ का लिंक इस तरह कुछ दिखाई देगा: mysite.com/username। इसलिए डिफ़ॉल्ट खाते/प्रोफ़ाइल या LOGIN_REDIRECT_URL सेटिंग्स इस मामले में काम नहीं करेंगे क्योंकि दोनों किसी भी तरह स्थिर हैं। मेरे मामले में पते के username अनुभाग प्रत्येक उपयोगकर्ता के लिए बदलता है।

कोई भी विचार मैं इसे कैसे बना सकता हूं ताकि जब उपयोगकर्ता लॉग इन हो, तो उस कस्टम उपयोगकर्ता पृष्ठ पर जायेगा जिसमें उपयोगकर्ता का नाम पता है: mysite.com/username? किसी भी इनपुट वास्तव में सराहना की है।

उत्तर

6

आप प्रमाणित करने और के रूप में यहां कहा गया है में उपयोगकर्ता लॉग ऑन कर सकते हैं: http://docs.djangoproject.com/en/dev/topics/auth/#how-to-log-a-user-in

यह आपको उपयोगकर्ता वस्तु है जिसमें से आप उपयोगकर्ता नाम प्राप्त कर सकते हैं के लिए पहुँच और फिर कस्टम URL में एक HttpResponseRedirect कर दे देंगे।

+0

मुझे लगता है कि मैं django.contrib.auth.views कि Django के साथ आता है का उपयोग कर रहा उल्लेख करना भूल गया। क्या इस मामले में ऊपर वर्णित कस्टम यूआरएल हो सकता है? – avatar

+1

मैं आपको लगता है कि सीमा तक 'auth.views.login' अनुकूलित कर सकते हैं, तो यकीन नहीं है। उस ने कहा, मैं बस अपना खुद का लॉगिन फ़ंक्शन लिखूंगा, ठीक उसी तरह से दस्तावेज में जो मैंने उपरोक्त से लिंक किया था। –

55

एक आसान दृष्टिकोण पृष्ठ LOGIN_REDIRECT_URL से पुनर्निर्देशन पर निर्भर करता है। एहसास करने की मुख्य बात यह है कि उपयोगकर्ता की जानकारी स्वचालित रूप से अनुरोध में शामिल होती है।

मान लीजिए:

LOGIN_REDIRECT_URL = '/profiles/home' 

और आप एक URLPATTERN कॉन्फ़िगर किया है:

(r'^profiles/home', home), 

फिर, आप सभी को देखने के लिए home() लिखने की ज़रूरत है:

from django.http import HttpResponseRedirect 
from django.core.urlresolvers import reverse 
from django.contrib.auth.decorators import login_required 

@login_required 
def home(request): 
    return HttpResponseRedirect(
       reverse(NAME_OF_PROFILE_VIEW, 
         args=[request.user.username])) 

जहां NAME_OF_PROFILE_VIEW है आप जिस कॉलबैक का उपयोग कर रहे हैं उसका नाम। Django-profiles के साथ, NAME_OF_PROFILE_VIEW 'profiles_profile_detail' हो सकता है।

+1

कक्षा-आधारित विचारों के बारे में कैसे? – User

+0

@User 'home' दृश्य किसी भी यूआरएल ढांचा रीडायरेक्ट कर सकते हैं, यह कोई बात नहीं है कि क्या यह एक समारोह आधारित दृश्य या एक वर्ग आधारित दृश्य का उपयोग करता है। – Alasdair

0

हाल ही में django में मिला और उस के समाधान में देख रहा था और एक विधि मिली जो उपयोगी हो सकती है।

तो उदाहरण के लिए, यदि ऑलउथ का उपयोग करना डिफ़ॉल्ट रीडायरेक्ट खाता/प्रोफ़ाइल है। एक राय यह है कि पूरी तरह से तो जैसे उपयोगकर्ता नाम फ़ील्ड का उपयोग पसंद का एक स्थान पर रीडायरेक्ट करें:

def profile(request): 
name=request.user.username 
return redirect('--choose where--/' + name + '/') 

फिर एक राय यह है कि यह अपने एप्लिकेशन में से एक में कब्जा बनाने के लिए, उदाहरण के लिए:

def profile(request, name): 
user = get_object_or_404(User, username=name) 
return render(request, 'myproject/user.html', {'profile': user}) 

कहाँ urlpatterns कैप्चर इस तरह दिखेगा:

url(r'^(?P<name>.+)/$', views.profile, name='user') 

मेरे लिए अच्छा काम करता है।

2

हाँ! अपने settings.py में परिभाषित निम्नलिखित

LOGIN_REDIRECT_URL = '/your-path' 

और '/ अपने-पथ' कि self.request.user ऊपर लग रहा है और जो कुछ भी तर्क है कि यह एक HttpResponseRedirect वस्तु वापस जाने के लिए की जरूरत है करता है एक साधारण दृश्य होना है।

एक बेहतर तरीका '/simple' कि वहाँ देखने तर्क की तरह एक साधारण URL निर्धारित कर हो सकता है। यूआरएल अधिक सुंदर, आदि लगता है कि आप कुछ काम की बचत होती है,

-3
return render(request,'page_location/page_name') 

return render(request,'home/page-login.html') 
+3

आप इसे पर प्रकाश डाला और मार Ctrl + K करके अपने कोड प्रारूप कृपया सकते हैं – WhatsThePoint

संबंधित मुद्दे

 संबंधित मुद्दे