在web开发过程中,几乎所有的网站项目都会涉及到用户的登录功能,该功能可以用html中的form标签实现一个登录框,输入数据金进行信息的绑定。然而,在这个“达则兼济天下”的Django框架中,丰富的组件为我们减少了很多工作,其中一个名为forms的模块就可以从python代码的层面,实现表单。
用户登录的流程如图:
- 创建一个Django项目Test,创建应用account(过程略)
- 编写登录的前端页面 ./templates/account/login.html
- 3.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>Input your username and password</p>
<form action="." method="post">
{% csrf_token %}
{{ forms.as_p }}
<input type="submit" value="Login">
</form>
</body>
</html>
并在setting.py中添加模板路径
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
- 在./account目录创建一个文件forms.py
from django import forms
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
4.编写视图函数
from django.contrib.auth import authenticate, login
from django.http import HttpResponse
from django.shortcuts import render
from account.forms import LoginForm
def user_login(request):
if request.method == "POST":
login_form = LoginForm(request.POST)
if login_form.is_valid():
cd = login_form.cleaned_data
user = authenticate(username=cd['username'],password=cd['password'])
if user:
'''用户登陆后,Django会自动调用默认的session应用,
将用户的id存至session中,通常情况下,login与authenticate
配合使用'''
login(request,user)
return HttpResponse('成功登录')
else:
return HttpResponse('登录失败')
else:
return HttpResponse("输入不合法")
if request.method == "GET":
login_form = LoginForm()
return render(request,'account/login.html',{"forms":login_form})
- 迁移数据文件,启动服务即可