简单的用户登录验证功能的完整代码示例

115 阅读1分钟

下面是一个简单的用户登录验证功能的完整代码示例,包含 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