要编写登录页面,我们需要完成以下步骤:
template文件夹中创建 login.html 模板文件,输入以下 HTML 代码:
{% extends 'base.html' %}
{% block title %}Login{% endblock %}
{% block content %}
<h2>Login</h2>
<form method="post">
{% csrf_token %}
<div>
<label for="username">Username:</label>
<input type="text" name="username" required>
</div>
<div>
<label for="password">Password:</label>
<input type="password" name="password" required>
</div>
<button type="submit">Login</button>
</form>
{% endblock %}
在上面的模板中,我们使用了 {% extends 'base.html' %} 继承了基础模板 base.html,并覆盖了 block 中的内容来实现登录页面的具体功能。
在 views.py 文件中编写登录视图函数 login_view:
from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login def login_view(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return redirect('home') else: error_msg = 'Invalid username or password' return render(request, 'login.html', {'error_msg': error_msg}) else: return render(request, 'login.html')
在上面的视图函数中,我们首先判断请求的方法是否为 POST,如果是则获取请求中的用户名和密码,并使用 authenticate() 函数进行身份验证。如果身份验证成功,则使用 login() 函数登录用户,并重定向到首页;否则,将错误消息传递给模板,并重新渲染登录页面。
在 urls.py 文件中设置登录页面的 URL,将其映射到 login_view 视图函数:
from django.urls import path from .views import login_view urlpatterns = [ path('login/', login_view, name='login'), ]
或者
from django.urls import path from . import views urlpatterns = [ path('login/', views.login_view, name='login'), # ... 其他 URL 模式 ... ]