第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界面来管理用户数据,并为用户模型添加自定义字段。

复制代码
相关推荐
湫ccc4 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe4 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin4 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪4084 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
湫ccc5 小时前
《Python基础》之基本数据类型
开发语言·python
drebander6 小时前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
威威猫的栗子7 小时前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
墨染风华不染尘7 小时前
python之开发笔记
开发语言·笔记·python
苹果酱05677 小时前
前端面试vue篇:Vue2 和 Vue3 在设计和性能上有显著区别
java·spring boot·毕业设计·layui·课程设计
Dxy12393102167 小时前
python bmp图片转jpg
python