(2022.01.12 Wed)
创建一个新用户
Django中创建新用户,需要用到django.contrib.auth.models
中的User
。根据Django官方文档,仅有一种用户类型,而superuser或admin等类型是带有不同属性(attribute set)的用户对象,不是不同的用户对象类。
用户对象有5个属性
- username
- password
- last name
- first name
创建普通用户的代码如下
from django.contrib.auth.models import User
def xxx(request):
if request.POST:
u = request.POST.get('username')
p = request.POST.get('password')
user = User.objects.create_user(username=u, password=p)
'''
# another way
user = User.objects.create_user(username=u)
user.set_password(p)
'''
# 到这一步,user对象已经被保存到数据库中,之后仍然可以修改其他属性
user.last_name = 'Cheung'
user.save()
...
return xxx
创建superuser,需要进入command prompt
$ python manage.py createsuperuser --name=jeff [email protected]
输入如上指令,会提示输入密码,之后便创建了superuser。
staff用户拥有网站的管理权限。
用户数据的保存
django.contrib.auth的若干对象
Django的验证架构(authentication framework),即django.contrib.auth
,包含多个重要对象,比如authenticate
,login
,logout
等。
authenticate方法
authenticate
方法接受两个参数输入username
和password
,返回结果是user
类型的对象(验证通过),或None
(验证不通过)。注意该方法仅用来验证,不参与登陆操作。
from django.contrib.auth import authenticate
def afunct(request):
...
username = request.POST.get('username')
password =request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
return('credential valid.')
else:
return('credential invalid')
输入的request
是一个对象,包含了请求的各种信息。
login方法
验证通过之后调用,调用方法
...
user = authenticate(username=username, password=password)
login(request, user)
return render(request, 'login_success.html')
logout方法
logout
方法接受request
对象(HttpRequest
),将该对象中的信息清除,返回一个None
对象。
def signout(request):
p = logout(request)
return HttpResponse('Logout success.')
request.user.is_authenticate
request.user.is_authenticated
指令用于判断该用户是否登陆,返回boolean
类型变量。注意该指令需要结合login
指令使用。
def authen(request):
user = authenticate(username=username, password=password)
print('check is_authenticated: ', request.user.is_authenticated)
login(request, user)
print('check is_authenticated: ', request.user.is_authenticated)
return HttpResponse('xxx')
运行该函数,打印结果如下:
check is_authenticated: False
check is_authenticated: True
Reference
1 Django官网doc