Django用户认证系统 authentication system

Posted feelang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django用户认证系统 authentication system相关的知识,希望对你有一定的参考价值。

Django集成了用户登陆/验证/登出的模块,可以直接拿来使用,也可以进行定制,使用起来非常方便. 一,创建Django工程
$ django-admin.py startproject mysite
工程目录结构如下
lyndon@lyndon-ubuntu:~/Study/django$ tree mysite/
mysite/
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

1 directory, 5 files
二,添加主页,登陆之后才能够访问, 修改urls.py,为使代码简洁,删掉了admin相关的代码.
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^home/$', 'mysite.views.home', name='home'),
)
在mysite/mysite/目录下新建views.py文件,并添加主页的view
from django.http import HttpResponse

def home(request):
    return HttpResponse('Welcome, logout')
执行
$ python manager.py runserver
在浏览器中输入 localhost:8000/home,可以看到页面中有一个logout的超链接,登陆后点击它可以退出. 三,添加登陆功能 修改views.py为home页面添加登陆认证
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required

@login_required(login_url="/login/")
def home(request):
    return HttpResponse('Welcome, logout')
添加login的url规则映射,并指定template名.
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^home/$', 'mysite.views.home', name='home'),
    url(r'^login/$', 'django.contrib.auth.views.login', 'template_name': 'login.html'),
)
在mysite/mysite目录下新建一个 tempaltes文件夹用来存放模板文件 然后在templates目录下新建一个login.html文件
<!DOCTYPE html>
<html>
    <head>
        <title>login</title>
    </head>
    <body>
    % if form.errors %
        <p>Your username and password didn't match. Please try again.</p>
    % endif %
	<form method="post" action="% url 'django.contrib.auth.views.login' %">
	% csrf_token %
            <table>
            <tr>
                <td> form.username.label_tag </td>
                <td> form.username </td>
            </tr>
            <tr>
                <td> form.password.label_tag </td>
                <td> form.password </td>
            </tr>
            </table>

	    <input type="submit" value="login" />
	    <input type="hidden" name="next" value=" next " />
	</form>
    </body>
</html>


在settings.py文件中添加模板的路径
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'), 
)
join的第二个参数templates前面不能有/,否则会找不到文件 由于用户认证会用到 djang_session这个数据库,因此需要同步数据库
$ python manage.py syncdb
重新启动服务器,在浏览器中打开 localhost:8000/home时,页面被重定向到 http://localhost:8000/login/?next=/home/,而且URL中next的值会传递给login.html中的
<input type="hidden" name="next" value=" next " />
这样,当用户登陆后,可以直接跳转到登陆之前的页面. 因为在home的view上添加了@login_required(login_url="/login/"),所以当访问home页面时,如果没有登陆,则自动跳转到登陆页面. 三,添加登出功能 登陆之后,页面显示如下 Welcome, logout 点击logout之后,应该清楚当前用户信息,并重定向到退出页面. 在urls.py中添加登出的url规则
url(r'^logout/$', 'django.contrib.auth.views.logout', 'template_name': 'logout.html'),
在templates文件夹下添加logout.html
<!DOCTYPE html>
<html>
    <head>
        <title>login</title>
    </head>
    <body>
	<p>Bye</p>
    </body>
</html>
点击主页的logout后,用户将登出,并重定向到logout.html 当然,如果logout的时候不需要重定向,则可以在views.py中添加一个logout的view,通过django.contrib.auth.logout(request)来手动退出. 所有的文件结构如下所示
lyndon@lyndon-ubuntu:~/Study/django$ tree mysite/
mysite/
├── db.sqlite3
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
└── templates
    ├── login.html
    └── logout.html

2 directories, 9 files

以上是关于Django用户认证系统 authentication system的主要内容,如果未能解决你的问题,请参考以下文章

django认证系统

django认证系统 Authentication

Django的用户认证----介绍

Django——用户认证

Django 框架篇: django自带的认证系统

Django的认证系统