之前我們有試過用自己寫的
app.views.login
function,利用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還是需要存在。