下面是一个简单的用户登录验证功能的完整代码示例,包含 Django 视图、模型、表单以及相应的 URL 路由配置。
1. 创建用户模型(models.py)
在 main_site/models.py 中,假设已经有一个用户模型。如果使用 Django 默认的用户模型,可以跳过这一步。如果有自定义用户模型,可以定义如下:
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# 其他用户信息字段
2. 创建登录表单(forms.py)
在 main_site/forms.py 中,定义一个用于登录的表单:
from django import forms
from django.contrib.auth.forms import AuthenticationForm
class LoginForm(AuthenticationForm):
username = forms.CharField(max_length=150, required=True)
password = forms.CharField(widget=forms.PasswordInput, required=True)
3. 视图函数(views.py)
在 main_site/views.py 中,定义处理用户登录的视图函数:
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib import messages
from .forms import LoginForm
def user_login(request):
if request.method == 'POST':
form = LoginForm(request, data=request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
messages.success(request, 'Login successful.')
return redirect('home') # 登录成功后重定向到主页
else:
messages.error(request, 'Invalid username or password.')
else:
form = LoginForm()
return render(request, 'login.html', {'form': form})
4. URL 路由(urls.py)
在 main_site/urls.py 中,添加登录视图的路由:
from django.urls import path
from .views import user_login
urlpatterns = [
path('login/', user_login, name='login'), # 登录页面
]
5. 登录模板(login.html)
在 open_site_vue 目录中创建一个 login.html 文件,添加以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{% static 'css/login.css' %}">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
</body>
</html>
6. 主项目 URL 路由(open_site/urls.py)
在主项目的 urls.py 中,确保包含 main_site 的 URL 路由:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('apps.main_site.urls')), # 将主应用的 URL 路由包含进来
]
7. 运行项目
确保已经应用了数据库迁移,创建了超级用户(以便于管理用户),并在本地启动开发服务器:
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver