关于django的用户认证系统

之前在学习tornado的时候,习惯自己设计用户表,和用户认证以及自己往session写用户信息。

django给咱们封装了一套,自身的用户登录和登出认证的一系列操作。

详细内容官方地址:https://docs.djangoproject.com/en/1.10/topics/auth/default/

come on 让我们来一起玩转django的自认证系统!

一:使用django的自身的User表创建用户和认证用户。

默认django用户的表结构字段:

1 username
2 password
3 email
4 first_name
5 last_name

有时候在公司内部我们的username账号为拼音缩写。而我们需要的是中文,所以我们可以给firstname或者lastname设置中文名字 而username为我们的账号拼音。

各个字段的详细介绍:https://docs.djangoproject.com/en/1.10/ref/contrib/auth/#django.contrib.auth.models.User

 

为我们的系统创建账号,普通用户账号。

1 >>> from django.contrib.auth.models import User
2 >>> user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
3 
4 # At this point, user is a User object that has already been saved
5 # to the database. You can continue to change its attributes
6 # if you want to change other fields.
7 >>> user.last_name = 'Lennon'
8 >>> user.save()

 创建超级用户,命令行形式:

1 $ python manage.py createsuperuser --username=joe --email=joe@example.com

 修改密码:

命令形式:

1 manage.py changepassword *username* 

或者调用django方法解决:直接更新 django 的User表。

1 >>> from django.contrib.auth.models import User
2 >>> u = User.objects.get(username='john')
3 >>> u.set_password('new password')
4 >>> u.save()

 

二:django 认证我们用户(Authenticating users):

使用方法:authenticate() 来认证我们前端post过来的账号和密码。该方法默认认证参数为:username和password.该方法如果认证成功之后,返回一个user对象,反之返回None。

1 from django.contrib.auth import authenticate
2 user = authenticate(username='john', password='secret')
3 if user is not None:
4     # A backend authenticated the credentials
5 else:
6     # No backend authenticated the credentials

 

我们可以通过如上的方法进行进行账号和密码认证。当然还有权限的设置。详情看:https://docs.djangoproject.com/en/1.10/topics/auth/default/

三:session操作。

当我们登录之后,还想进行当前的session进行操作,可以使用login()函数来帮助我们实现这个功能。login(request, user, backend=None

当我们登录认证之后,我们接下来操作将用户的id等信息写入session中,如果只是简单的认证没有执行login操作的话,我们不能从request.user中读取出当前登录用户,而是:anonymous
example:

 1 from django.contrib.auth import authenticate, login
 2 
 3 def my_view(request):
 4     username = request.POST['username']
 5     password = request.POST['password']
 6     user = authenticate(username=username, password=password)
 7     if user is not None:
 8         login(request, user)#对session进行写入
 9         # Redirect to a success page.
10         ...
11     else:
12         # Return an 'invalid login' error message.
13         ...

 

四:用户的登出操作:

logout(request) 使用logout方法来实现登出操作。

例子:

1 from django.contrib.auth import logout
2 
3 def logout_view(request):
4     logout(request)
5     # Redirect to a success page.

以上是简单介绍django的登录认证、session操作、登出的操作。

 

posted @ 2017-03-20 15:33  evil_liu  阅读(97)  评论(0)    收藏  举报