版本: python2.7

django 1.8.16


project名称:site_test, app: study

目录结构:

->site_test:tree.├──db.sqlite3├──manage.py├──site_test│├──__init__.py│├──__init__.pyc│├──settings.py│├──settings.pyc│├──urls.py│├──urls.pyc│├──views.py│├──views.pyc│├──wsgi.py│└──wsgi.pyc├──static└──templates├──index.html├──login.html├──registration│└──login.html└──study


1、site_test/settings文件中

INSTALL_APPS中要包含django.contrib.auth和django.contrib.contenttypes。默认就有

django.contrib.contenttypes 是 auth 模块的用户权限处理部分依赖的应用


MIDDLEWARE_CLASSES中要包含:

SessionMiddleware :用户处理用户会话。

AuthenticationMiddleware: 绑定一个 User 对象到请求中。

默认就有这两个中间件


INSTALLED_APPS=(##其他应用,'django.contrib.auth','django.contrib.contenttypes',)MIDDLEWARE_CLASSES=('其他中间件列表','django.contrib.sessions.middleware.SessionMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware',)


2、site_test/urls.py 文件

login, loginout是django自带的方法,需要从django.contrib.auth.views中导入才能使用

fromdjango.conf.urlsimportinclude,urlfromdjango.contribimportadminimportviewsimportdjango.contrib.auth.viewsasauth_views##不要忘记导入这个urlpatterns=[url(r'^admin/',include(admin.site.urls)),url(r'^login/',auth_views.login),url(r'^logout/',auth_views.logout_then_login),url(r'^$',views.index),]

自带的url有以下这些:

^login/$[name='login']^logout/$[name='logout']^password_change/$[name='password_change']^password_change/done/$[name='password_change_done']^password_reset/$[name='password_reset']^password_reset/done/$[name='password_reset_done']^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$[name='password_reset_confirm']^reset/done/$[name='password_reset_complete']



3、site_test/views.py :

该文件定义了访问index页面的视图方法,该文件需要自己创建。加上login_required() 意思是在访问该页面之前需要登录


#coding:utf-8fromdjango.shortcutsimportredirect,renderfromdjango.contrib.auth.decoratorsimportlogin_required@login_required()defindex(request):returnrender(request,'index.html')


login.html:

该文件位于templates/registration/login.html

注意:login.html不一定要位于registration目录下

如果您不想调用模板registration/login.html,您可以通过额外的参数将template_name参数传递给as_view你的URLconf中的方法。

例如,下面URLconf中的行将使用myapp/login.html:

url(r'^accounts/login/$',auth_views.LoginView.as_view(template_name='myapp/login.html')),


login.html文件内容

<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title></title></head><body><formaction='.'method='post'>{%csrf_token%}<labelfor="username">用户名:</label><inputtype="text"name="username"value=""id="username"><labelfor="password">密码:</label><inputtype="password"name="password"value=""id="password"><!--<inputtype="submit"value="login">--><inputtype="submit"value="login"><inputtype="hidden"name="next"value="{{next|escape}}"></form></body></html>



4、settings.py中加 LOGIN_URL(未通过认证时跳转的认证页面) 和 LOGIN_REDIRECT_URL (登录成功后默认跳转的页面)

LOGIN_URL='/login' ##登录页面的url

LOGIN_REDIRECT_URL='/' ##登陆后跳转的页面,即索引页面


5、index.html文件

html文件中要可以直接通过{{ user }}获取用户名

<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title></title></head><body>{{user}}<ahref="/logout/">退出</a><h2>欢迎访问index页面</h2></body></html>


登录测试


注销后返回到登录页面




参考文档:http://python.usyiyi.cn/translate/django_182/topics/auth/default.html

http://blog.nsfocus.net/django-easy-steps-user-authentication/

https://www.zmrenwu.com/post/30/