Django中如何编写登录、注册及登出的view.py与请求处理
嘿,作为Django新手,搞定登录、注册和登出这几个核心功能绝对是入门路上的重要一步!我会用最易懂的方式给你拆解视图层(views.py)的代码,还有每个请求(GET/POST)的处理逻辑,看完你就能上手啦~
先理清楚前置准备
首先,Django自带了用户认证的核心工具,咱们直接用现成的就好,不用从零造轮子:
- 用Django内置的
User模型来存储用户数据 - 用内置的
UserCreationForm(注册表单)和AuthenticationForm(登录表单)来处理输入验证,省得自己写表单字段
1. 注册功能的视图实现
注册的逻辑很清晰:
- GET请求:返回一个空的注册表单,让用户填写信息
- POST请求:接收用户提交的表单数据,验证合法性,合法就创建新用户,然后跳转到登录页面;不合法就返回表单并显示错误信息
from django.shortcuts import render, redirect from django.contrib.auth.forms import UserCreationForm def register(request): # 处理POST请求:用户提交注册信息 if request.method == 'POST': # 把POST数据传入表单 form = UserCreationForm(request.POST) if form.is_valid(): # 保存新用户到数据库 form.save() # 注册成功后跳转到登录页(你可以改成首页或者其他页面) return redirect('login') # 处理GET请求:返回空表单 else: form = UserCreationForm() # 把表单传递给模板渲染 return render(request, 'registration/register.html', {'form': form})
2. 登录功能的视图实现
登录的逻辑:
- GET请求:返回空的登录表单
- POST请求:验证用户输入的账号密码,正确就登录(把用户信息存入session),跳转首页;错误就返回表单显示错误
from django.contrib.auth import authenticate, login from django.contrib.auth.forms import AuthenticationForm def user_login(request): if request.method == 'POST': # 实例化登录表单,传入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: # 登录用户,创建session login(request, user) # 登录成功跳转到首页(可自定义) return redirect('home') else: form = AuthenticationForm() return render(request, 'registration/login.html', {'form': form})
3. 登出功能的视图实现
登出就简单多了,核心是清除用户的session:
- 这里我们用POST请求更安全(避免误点登出链接),当然如果是新手也可以用GET,不过推荐用POST
from django.contrib.auth import logout from django.shortcuts import redirect def user_logout(request): # 确保是POST请求(安全起见) if request.method == 'POST': # 清除用户session,完成登出 logout(request) # 登出后跳转到登录页或首页 return redirect('login') # 如果是GET请求,也可以跳转到首页或者提示用户用正确方式登出 return redirect('home')
额外的小提示
- 别忘了配置URL路由,比如在
urls.py里:
from django.urls import path from . import views urlpatterns = [ path('register/', views.register, name='register'), path('login/', views.user_login, name='login'), path('logout/', views.user_logout, name='logout'), ]
- 模板里要记得加
{% csrf_token %},不然POST请求会被Django的CSRF保护拦截,比如登录模板login.html大概长这样:
<form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">登录</button> </form>
- 如果你想自定义表单字段(比如加邮箱、手机号),可以继承
UserCreationForm来扩展,这个等你熟悉基础后再尝试就好~
内容的提问来源于stack exchange,提问作者user9180455
相关产品推荐
相关产品推荐

