用户管理
用户数据可以说是大部分网站最重要的资产。用户管理就是对用户数据进行增删改查等操作的功能,自然也就非常的重要了。
本章开始学习用户管理的内容,首先从用户登录开始。
在Django中用app来区别不同功能的模块,达到代码隔离和复用。因为用户管理和博客文章的功能不同,因此需要新建一个专门的app。
进入虚拟环境,运行startapp
指令创建新的app:
python manage.py startapp userprofile
查看项目目录,发现已经新生成了userprofile目录及其中的文件了。
再遇表单类
用户登录时,需要填写账户密码等表单数据,因此又要用到Form表单类。
在userprofile
目录中创建表单类的文件forms.py
,编写如下代码:
/userprofile/forms.py
# 引入表单类
from django import forms
# 引入 User 模型
from django.contrib.auth.models import User
# 登录表单,继承了 forms.Form 类
class UserLoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField()
在前面发表文章的模块中,表单类继承了forms.ModelForm
,这个父类适合于需要直接与数据库交互的功能,比如新建、更新数据库的字段等。如果表单将用于直接添加或编辑Django模型,则可以使用 ModelForm
来避免重复书写字段描述。
而forms.Form
则需要手动配置每个字段,它适用于不与数据库进行直接交互的功能。用户登录不需要对数据库进行任何改动,因此直接继承forms.Form
就可以了。
编写视图
用户的登录是比较复杂的功能,好在Django提供了封装好的模块供我们使用。
首先在userprofile/views.py
中写视图函数:
/userprofile/views.py
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.http import HttpResponse
from .forms import UserLoginForm
# Create your views here.
def user_login(request):
if request.method == 'POST':
user_login_form = UserLoginForm(data=request.POST)
if user_login_form.is_valid():
# .cleaned_data 清洗出合法数据
data = user_login_form.cleaned_data
# 检验账号、密码是否正确匹配数据库中的某个用户
# 如果均匹配则返回这个 user 对象
user = authenticate(username=data['username'], password=data['password'])
if user:
# 将用户数据保存在 session 中,即实现了登录动作
login(request, user)
return redirect("article:article_list")
else:
return HttpResponse("账号或密码输入有误。请重新输入~")
else:
return HttpResponse("账号或密码输入不合法")
elif request.method == 'GET':
user_login_form