🔖 Day10 - Django's views.login, @login_required,

2018 - 06 - 26
🔖 Day10 - Django's views.login, @login_required,
之前我們有試過用自己寫的app.views.loginfunction,利用return把登入後頁面回傳到我們的首頁。 但其實Django也有它預設的login page - django.contrib.auth.views.login 登入後頁面可以使用login_redirect_url, 還可以配合django.contrib.auth.decorators.login_required使用{{ next }} parameter。
1. [Set url] 要使用預設的login功能,先到urlspattern修改: urls.py
from django.contrib.auth import views as av
django.urls import path

urlspattern=[
    ...
    ...
    path('login/', av.login, name='login'),
]

這樣就變成使用了Django's default login function。
2. [Relocate login.html] 然後把我們早前建好的template - login.html 放到 registration/login.html
3. [Login redirect after logged in] default的login function可以使用LOGIN_REDIRECT_URL來指定。 比如我們要在登入後,回到首頁 - name=blog, 到settings.py新增:
LOGIN_REDIRECT_URL = 'blog'


4. [Login required decorator] 假設有用戶在未登入時,打開了必需登入的頁面,即views function有被加上@login_required的,用戶會先被redirect至login。 如果我們希望用戶在登入後,再次回到本來的function,可以在registration/login.html加上這一行:
<form method='post'>
{% csrf_token %}
<input type='hidden' name='next' value='{{ next }}'>
...
...
這樣用戶就會在登入後被回傳至之前的頁面。 跟LOGIN_REDIRECT_URL不同,{{ next }}是在有前一功能頁時才會被使用到, 所以LOGIN_REDIRECT_URL還是需要存在。

Comments

There is no comment yet

New Comment

Please Login to comment