第4天:用户认证系统实现

第4天:用户认证系统实现

目标

实现用户认证系统,包括用户注册、登录、登出和密码管理。

任务概览
  1. 使用Django内置的用户认证系统。
  2. 创建用户注册和登录表单。
  3. 实现用户登出和密码重置功能。
详细步骤
1. 使用Django内置的用户认证系统

Django提供了一个强大的内置用户认证系统,包括用户管理、权限和组等。首先,确保在你的settings.py文件中包含了认证相关的应用:

python 复制代码
# myproject/myproject/settings.py

INSTALLED_APPS = [
    # ...
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.admin',
]
2. 创建用户注册表单

Django的auth应用提供了一个基本的UserCreationForm,你可以用它来创建用户注册表单:

python 复制代码
# myproject/myapp/forms.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class SignUpForm(UserCreationForm):
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')

    class Meta:
        model = User
        fields = ('username', 'email', 'password1', 'password2')
3. 创建用户登录表单

Django同样提供了AuthenticationForm用于用户登录:

python 复制代码
# myproject/myapp/forms.py

from django.contrib.auth.forms import AuthenticationForm

# 如果需要自定义,可以继承AuthenticationForm并修改
4. 实现用户注册视图和模板

创建视图来处理用户注册的逻辑:

python 复制代码
# myproject/myapp/views.py

from django.shortcuts import render, redirect
from .forms import SignUpForm

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('login')  # 重定向到登录页面
    else:
        form = SignUpForm()
    return render(request, 'signup.html', {'form': form})

创建相应的模板signup.html

html 复制代码
<!-- myproject/myproject/templates/signup.html -->

{% extends 'base.html' %}

{% block content %}
  <h2>Sign up</h2>
  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Sign up</button>
  </form>
{% endblock %}
5. 实现用户登录视图

创建登录视图:

python 复制代码
# myproject/myapp/views.py

from django.contrib.auth import authenticate, login
from django.http import HttpResponseRedirect
from .forms import AuthenticationForm

def user_login(request):
    if request.method == 'POST':
        form = AuthenticationForm(request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return HttpResponseRedirect('/home/')  # 重定向到首页
    else:
        form = AuthenticationForm()
    return render(request, 'login.html', {'form': form})
6. 实现用户登出功能

创建登出视图:

python 复制代码
# myproject/myapp/views.py

from django.contrib.auth import logout

def user_logout(request):
    logout(request)
    return redirect('login')  # 重定向到登录页面
7. 配置URLs

将视图函数映射到URL:

python 复制代码
# myproject/myapp/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('signup/', views.signup, name='signup'),
    path('login/', views.user_login, name='login'),
    path('logout/', views.user_logout, name='logout'),
]
学习要点
  • 理解Django内置的用户认证系统。
  • 学会创建用户注册和登录表单。
  • 掌握用户认证视图的编写和模板的创建。
每日回顾
  • 确保用户注册和登录流程正常工作。
  • 测试登出功能是否按预期工作。

通过今天的学习,你应该能够实现一个基本的用户认证系统,包括注册、登录和登出功能。明天,我们将学习如何使用Django的Admin界面来管理用户数据,并为用户模型添加自定义字段。

复制代码
相关推荐
2401_83150173几秒前
Python学习之Day07-08学习(Django网页Web开发)
python·学习·django
Tiny番茄15 分钟前
leetcode 3. 无重复字符的最长子串
数据结构·python·算法·leetcode
胡斌附体30 分钟前
离线docker安装jupyter(python网页版编辑器)
python·docker·jupyter·image·tar·save
java1234_小锋1 小时前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 使用Keras实现逻辑回归
python·深度学习·tensorflow·tensorflow2
java1234_小锋2 小时前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - Sequential顺序模型
python·深度学习·tensorflow·tensorflow2
雨夜的星光6 小时前
Python JSON处理:load/loads/dump/dumps全解析
开发语言·python·json
fen_fen7 小时前
Java打包时,不将本地Jar打包到项目的最终 JAR 中
开发语言·python·pycharm
可触的未来,发芽的智生9 小时前
触摸未来2025.10.10:记忆的种子,当神经网络拥有了临时工作区,小名喜忆记系统
人工智能·python·神经网络·机器学习·架构
mortimer9 小时前
在 Windows 上部署 NVIDIA Parakeet-TDT 遇到的坑
python·github·nvidia
清风66666610 小时前
基于单片机的智能点滴输液速度与液位控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计