使用Django内置的login和logout

unsplash

使用Django内置的Login和Logout。

前置条件

确保django.contrib.authINSTALLED_APPS里,如果使用django-admin startproject生成的项目,则会自动配置好。

创建一个超级管理员用户:python manage.py createsuperuser

配置URL路由

主要使用django.contrib.auth.views模板,配置url如下:

1
2
3
4
5
6
7
8
9
from django.conf.urls import url
from django.contrib import admin
from django.contrib.auth import views as auth_views

urlpatterns = [
url(r'^login/$', auth_views.login, name='login'),
url(r'^logout/$', auth_views.logout, name='logout'),
url(r'^admin/', admin.site.urls),
]

创建login模板文件

默认情况下,django.contrib.auth.views.login会寻找registration/login.html作为自己的模板文件(也可以配置,后面会提及)。

manage.py的同级目录下创建templates/registration/两级目录,并在该目录下创建login.html文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
{% extends 'base.html' %}

{% block title %}Login{% endblock %}

{% block content %}
<h2>Login</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
{% endblock %}

base.html应该放在templates/下,可以从django的系统复制一个,或者复制这个文件

然后在settings.py里设置TEMPLATES如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # modify this line
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

运行起来后会看到如下效果:

login

这个简单的页面已经可以做好登陆了:

  • 输入正确的用户名和密码会跳转到/accounts/profile/(默认登陆后跳转页面)
  • 输入错误会给出提示

配置Login

为了适应实际项目,有一些参数需要配置。


使用自定义的模板文件,如果想要用core/login.html替换默认的registration/login.html模板文件,可以这样做:

1
url(r'^login/$', auth_views.login, {'template_name': 'core/login.html'}, name='login'),

或者传入一个自定义表单:

1
url(r'^login/$', auth_views.login, {'authentication_form': 'cform'}, name='login'),

前面提到登陆后的默认跳转页面为/accounts/profile/,可以在settings.py里添加LOGIN_REDIRECT_URL = 'home'设置登陆后跳转URL。

如果login参数中有next的话,会优先跳转到该地址。

Logout

同理,logout也可以进行配置。

自定义模板文件:

1
url(r'^logout/$', auth_views.logout, {'template_name': 'logged_out.html'}, name='logout'),

或者更简单的,通过next_page参数返回主页:

1
url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'),

参考信息

0%