2009-10-22 12 views
7

के साथ django LOGIN_REDIRECT_URL मैं उपयोगकर्ता को अपना उपयोगकर्ता नाम (जैसे http://domain/username/) वाले यूआरएल पर रीडायरेक्ट करने का प्रयास कर रहा हूं, और यह पता लगाने की कोशिश कर रहा हूं कि यह कैसे करें। मैं अपने उपयोगकर्ता प्रबंधन के लिए django.contrib.auth उपयोग कर रहा हूँ, तो मैं सेटिंग्स में LOGIN_REDIRECT_URL का उपयोग कर की कोशिश की है:गतिशील मान

LOGIN_REDIRECT_URL = '/%s/' % request.user.username # <--- fail.. 

लेकिन यह केवल बल्कि कुछ है कि के बाद निर्धारित किया जाएगा की तुलना में, तय तार स्वीकार करने के लिए लगता है उपयोगकर्ता लॉग इन है। मैं अभी भी इसे कैसे पूरा कर सकता हूं?

उत्तर

17

एक समाधान, '/ userpage /' जैसे स्थिर मार्ग पर रीडायरेक्ट करना है और यह अंतिम गतिशील पृष्ठ पर रीडायरेक्ट करना है।

लेकिन मुझे लगता है कि वास्तविक समाधान एक नया दृश्य बनाना है जो आप वास्तव में चाहते हैं।

from django.contrib.auth import authenticate, login 
from django.http import HttpResponseRedirect 

def my_view(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      login(request, user) 
      HttpResponseRedirect('/%s/'%username) 
     else: 
      # Return a 'disabled account' error message 
    else: 
     # Return an 'invalid login' error message. 

http://docs.djangoproject.com/en/dev/topics/auth/#authentication-in-web-requests

दृश्य को फिर से लिखने के बारे में अधिक जानकारी के लिए

। इस प्रकार दस्तावेज़ इस तरह की चीज को ओवरराइड करते हैं।

+2

मैं टी पसंद करते हैं वह स्थैतिक/उपयोगकर्तापृष्ठ/से रीडायरेक्ट करने का पहला सुझाव है। इस तरह, आप अभी भी 'django.contrib.auth.views' से लॉगिन दृश्य का उपयोग कर सकते हैं, जो एक हाथ से चलने वाले दृश्य से अधिक मजबूत हो सकता है। – Alasdair

+0

क्योंकि मैं यूआरएल को सरल बनाने और रीडायरेक्ट को कम करने की कोशिश कर रहा हूं, आपका समाधान जाने के रास्ते जैसा लगता है। धन्यवाद! – sa125

+0

मेरा सटीक प्रश्न हल करने वाला एक सरल और शानदार उत्तर क्या है। मुझे इस बारे में सोचने के लिए शर्म आती है। अपने इंटरनेट बिंदु का आनंद लें। – Esteban

0

अपने स्वयं के कस्टम व्यू में ऑथ व्यू लपेटें और प्रमाणीकरण सफल होने पर जहां चाहें वहां रीडायरेक्ट करें।

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

def login(request): 
    template_response = auth.views.login(request) 

    if isinstance(template_response, HttpResponseRedirect) and template_response.url == '/accounts/profile/': 
     return HttpResponseRedirect(reverse('user', args=(request.user.username,))) 


    return template_response 

एक अन्य विकल्प इंगित करने के लिए जहां प्रवेश के बाद पर रीडायरेक्ट करने क्वेरी परम next उपयोग करने के लिए है।

<a href="{% url 'login' %}?next={{ request.path }}">sign in</a> 
0
वर्ग आधारित django.contrib.auth.views.LoginView साथ

, अब आप बस get_success_url ओवरराइड कर सकते हैं:

urls.py:

url(r'^login$', MyLoginView.as_view(), name='login'), 
url(r'^users/(?P<username>[a-zA-Z0-9]+)$', MyAccountView.as_view(), name='my_account'), 

views.py

class MyLoginView(LoginView): 

    def get_success_url(self): 
     return reverse('my_account', args=[self.request.user.username]) 
संबंधित मुद्दे