关于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操作、登出的操作。

浙公网安备 33010602011771号