Django之登录页面优化--添加验证码
前面写的Django项目,前端登录页面较简单如下图,为了美化操作这边优化了前端登录页面。为了只专注登录页面优化这边新构建一个项目用于测试,后续在CV使用到其他项目上。
创建项目及应用
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
配置应用
- 在myproject/settings.py文件的INSTALLED_APPS列表中添加myapp应用:
INSTALLED_APPS = [
...
'myapp',
]
创建视图文件
- 在myapp应用下创建一个新的视图文件views.py,并编写以下代码:
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib import messages
from django.http import HttpResponse
def login_view(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
captcha = request.POST.get('captcha')
# 验证码校验
if captcha != 'ABCD':
messages.error(request, '验证码错误')
return redirect('login')
# 身份验证
user = authenticate(request, username=username, password=password)
if user:
login(request, user)
return HttpResponse('登录成功!')
else:
messages.error(request, '用户名或密码错误')
return redirect('login')
return render(request, 'login.html')
创建模版文件
- 在myapp下创建一个新的templates文件夹,并在其中创建一个名为login.html的HTML模板,内容如下:
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
{% if messages %}
{% for message in messages %}
<p>{{ message }}</p>
{% endfor %}
{% endif %}
<form method="POST">
{% csrf_token %}
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required>
<label for="password">密码:</label>
<input type="password" id="password" name="password" required>
<label for="captcha">验证码:</label>
<input type="text" id="captcha" name="captcha" required>
<img src="/captcha.jpg" alt="验证码">
<button type="submit">登录</button>
</form>
</body>
</html>
配置路由
- 在myproject/urls.py文件中添加以下URL配置:
from django.contrib import admin
from django.urls import path
from myapp.views import login_view
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', login_view, name='login'),
]
创建数据库及用户
python manage.py migrate
python manage.py createsuperuser
运行访问
通过http://localhost:8000/login/访问登录页面,输入用户名、密码和验证码后进行登录操作。请注意,以上示例中的验证码是硬编码为"ABCD"
python manage.py runserver