Python Day77 auth and User
在介绍此章节的内容时,我们需要引用到如下两个模块:
from django.contrib.auth.models import User from django.contrib import auth
一、User表介绍
其中User为django框架为我们提供用于存储登录用户和密码等信息的用户表,在我们使用此django认证系统时,必须使用此表,不可以另外创建用户表,且表中的内容不可以直接在表中添加,因为其存储密码为加密的的字符串。其中username和password字段是必须存入内容的字段。User表格添加数据两种方式如下:
1、方式一:
通过如下命令添加超级用户信息:python manage.py createsuperuser,然后按照步骤设置用户信息,其中username和password字段是必须存入内容的字段。
2、方式二:
通过create_user()或者create_superuser()(与上述创建超级用户效果一样)方法添加用户信息,如下注册用户函数的应用实例:
def register(request): if request.method=="POST": username=request.POST.get("username") userpswd1=request.POST.get("userpswd1") userpswd2=request.POST.get("userpswd2") if userpswd1==userpswd2: User.objects.create_user(username=username,password=userpswd1) #username和password为User表的关键字段 return redirect("/login/")
二、author模块方法
1、authenticate()
提供了用户认证,即验证用户名以及密码是否正确,一般需要username password两个关键字参数,如果认证信息有效,会返回一个 user 对象。具体使用见如下登录函数实例:
def login(request): if request.method=="POST": username=request.POST.get("username") userpswd=request.POST.get("userpswd") user=auth.authenticate(username=username,password=userpswd) if user: auth.login(request,user) # 相当于request.session["user"]=user.username return redirect("/booklist/") return render(request,"login.html")
2、login(HttpRequest, user)
该函数接受一个HttpRequest对象,以及一个认证了的user对象,此函数使用django的session框架给某个已认证的用户附加上session id等信息。即上述登录实例中设置session用法。
3、logout(request)
该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。如下注销当前登录用户的session实例:
def login_out(request): auth.logout(request) # 清除当前登录用户的session,相当于request.session.flush() return redirect("/login/")
三、user对象方法
1、is_authenticated()
返回值为bool值,主要用于判断user对象是否完成登录验证,如用在要求用户登录以后才能访问某些网址,否则跳转到登录页面完成登录。见如下页面函数访问前的验证实例:
def booklist(request): user=request.user #显示当前登录用户对象 if not user.is_authenticated(): return redirect("/login/") book_obj=Book.objects.all() return render(request,"booklist.html",{"book_obj":book_obj})
2、set_password()
使用 set_password() 来修改密码,见如下修改密码函数实例:
def modify(request): if request.method=="POST": username=request.POST.get("username") pre_userpswd=request.POST.get("pre_userpswd") new_userpswd=request.POST.get("new_userpswd") user=auth.authenticate(username=username,password=pre_userpswd) if user: user.set_password(new_userpswd) user.save() return redirect("/login/")
四、django常用命令
在django框架中常用的命令总结如下,注以下命令是在终端执行:
# 查看django版本 python -m django --version # 创建项目,名为mysite django-admin startproject mysite # Django项目环境终端 python manage.py shell # 创建应用程序,确保和 manage.py 是同一目录 python manage.py startapp app01 # 启动django python manage.py runserver python manage.py runserver 8080 python manage.py runserver 0.0.0.0:8000 # 数据库迁移 python manage.py makemigrations python manage.py migrate # 同步数据库 python manage.py syncdb # 清空数据库(保留空表) python manage.py flush # 认证User表创建超级用户 python manage.py createsuperuser # 修改用户密码 python manage.py changepassword username