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

复制代码
相关推荐
蒋星熠1 小时前
WebSocket网络编程深度实践:从协议原理到生产级应用
网络·数据库·redis·python·websocket·网络协议·微服务
带娃的IT创业者1 小时前
实战:用 Python 搭建 MCP 服务 —— 模型上下文协议(Model Context Protocol)应用指南
开发语言·python·mcp
万粉变现经纪人1 小时前
如何解决pip安装报错ModuleNotFoundError: No module named ‘python-dateutil’问题
开发语言·ide·python·pycharm·pandas·pip·httpx
跟橙姐学代码1 小时前
Python 类的正确打开方式:从新手到进阶的第一步
前端·python·ipython
c8i1 小时前
关于python中的变量中使用的下划线_总结
python
站大爷IP1 小时前
用Flet打造跨平台文本编辑器:从零到一的Python实战指南
python
MC皮蛋侠客2 小时前
使用python test测试http接口
开发语言·python·http
胡耀超2 小时前
5、Python-NumPy科学计算基础
开发语言·人工智能·python·深度学习·numpy
点灯小铭2 小时前
基于MATLAB的车牌识别系统
开发语言·单片机·数码相机·matlab·毕业设计·课程设计
BIGSHU09233 小时前
java多线程场景3-并发处理和异步请求
java·开发语言·python