Django用户, since 2022-01-12

(2022.01.12 Wed)

创建一个新用户

Django中创建新用户,需要用到django.contrib.auth.models中的User。根据Django官方文档,仅有一种用户类型,而superuser或admin等类型是带有不同属性(attribute set)的用户对象,不是不同的用户对象类。

用户对象有5个属性

  • username
  • password
  • email
  • 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,包含多个重要对象,比如authenticateloginlogout等。

authenticate方法

authenticate方法接受两个参数输入usernamepassword,返回结果是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

你可能感兴趣的:(Django用户, since 2022-01-12)