管理员可以通过admin后台对网站的用户和内容进行管理,但普通用户是不应该直接进入admin管理后台的。
下面我们实现网站最基础的用户登录,退出,注册的功能
1 创建app
终端中执行python manage.py startapp account
命令
之后在setting.py文件中添加app
INSTALLED_APPS=[
...,
'account',
]
2 创建表单类
在 account 中新建一个forms.py文件
先编写一个登录用的表单
from django import forms
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
3 编写视图文件
在account 的view.py中编写对应的视图函数
函数的处理流程简单来说就是通过判断是GET请求还是POST请求,分别返回登录窗口和处理登录请求
from django.contrib.auth import authenticate, login
from django.http import HttpResponse
from django.shortcuts import render
from .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:
login(request,user)
return HttpResponse('登录成功')
else:
return HttpResponse('用户名或密码不正确')
else:
return HttpResponse('登录失败')
if request.method == "GET":
login_form = LoginForm
return render(request,'account/login.html',{'form':login_form})
文件第一行引入了Django内置的用户认证和用户登录的方法
其中有一段代码需要强调一下
cd = login_form.cleaned_data
user = authenticate(username=cd['username'],password=cd['password'])
cleaned_data 是将form表单的数据转成了字典类型的数据。
authenticate 函数作用是验证此用户是否为本网站项目的用户。以及密码是否正确,如果都对上号了就返回User的一个实例对象,否则返回None。
一般情况下,authenticate()
和login()
配合使用。
4 登录的前端界面
编写./templates/account/login.html模板
<div class="row text-center ">
<h1>登录</h1>
<form class="form-horizontal" action="{% url 'user_login' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="登录">
</form>
</div>
这里的 {% csrf_token %}在表单中是必不可少的,不写在这个位置也行,只要在语句里即可。
5 配置路由
在urls.py中加入登录操作的路由
from account.views import user_login
urlpatterns = [
...,
path('login',user_login,name='user_login'),
]
登录模块到此就编写好了,可以先通过admin后台添加一个用户,然后在进入我们编写的登录页面尝试登录
6 注销功能的编写
注销功能很简单,也是调用Django内置的注消函数logout
views.py
中编写
from django.contrib.auth import authenticate, login,logout
def user_logout(request):
logout(request)
return HttpResponse("您已注销")
这里也可以return到其他的页面根据自己业务需求来修改
urls.py
中配置
urlpatterns = [
...,
path('logout',user_logout,name='user_logout'),
]
然后在前端界面的注销按钮中加入对应的链接地址即可
<li><a href="{% url 'user_logout' %}">注销</a></li>