簡體   English   中英

Django的。 登錄后重定向用戶

[英]Django. Redirecting user after login

我是Django的新手,需要您的幫助。

我正在基於基於類的視圖上構建我的應用程序。 對於登錄,我使用默認的django.contrib.auth.models.User類和UserInfo類的一對一關系來存儲其他信息(例如個人資料照片等):

models.py

class UserInfo(models.Model):
    user = models.OneToOneField(User)
    birth_date = models.DateField()
    avatar = models.FilePathField()

登錄成功后,我想將UserInfo數據傳遞到主頁(定義為DetailView )。 所以目前我有這樣的事情:

urls.py

urlpatterns = patterns('',
    url(r'^$',      Index.as_view(), name='index'), #Returns page with login form.
    url(r'^login$', Index.as_view(), name='login'), #Proceed login form and redirects to homepage.
    url(r'^home/id(?P<pk>\d+)$',  login_required(Home.as_view(), login_url='/'),  name='home'),
)

index.py

#Login proceed here
class Index(generic.FormView):
    template_name = 'index.html'
    form_class = AuthenticationForm
    success_url = '/home/id'

    def post(self, request, *args, **kwargs):
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username = username, password = password)
        if user is not None and user.is_active:
            login(request, user)
            return redirect('/home/id', pk = user.id)
        else:
            return redirect('/', {'error' : 'Incorrect login or password'})

home.py

class Home(generic.DetailView):
    model = UserInfo
    template_name = 'home.html'

不幸的是,它不起作用。 您能幫我了解它應該如何工作嗎? 以及如何在home.html頁面中獲取UserInfo數據?

您不應該在URL重定向中傳遞數據,因為它本質上是安全的,並且容易受到各種利用( Content Spoofing漏洞 )。

相反,您應該使用Django session通過重定向傳遞數據。 特別是在成功/錯誤消息的情況下, Django消息框架非常方便

from django.contrib import messages

def post(self, request, *args, **kwargs):
    ....
    else:
        messages.error(request, "Incorrect username or password")
        return redirect('/')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM