
Django
使用 Django 进行身份验证和 Ajax - 需要登录的 URL
在开发 Web 应用程序时,用户身份验证是一个非常重要的功能。Django 提供了强大且易于使用的身份验证系统,可以帮助我们轻松地管理用户的登录和注销过程。同时,为了增强用户体验,我们可以使用 Ajax 技术,实现无刷新的登录验证。在本文中,我们将探讨如何在 Django 中进行身份验证,并使用 Ajax 技术来处理需要登录的 URL。准备工作在开始之前,确保你已经安装了 Django。如果没有安装,可以使用以下命令安装:pip install Django同时,我们还需要安装一个用于处理 Ajax 请求的库 - Django Ajax。可以使用以下命令进行安装:
pip install Django-Ajax创建 Django 项目首先,我们需要创建一个 Django 项目。使用以下命令来创建一个名为 "authentication" 的项目:
Django-admin startproject authentication接下来,进入项目目录并创建一个名为 "accounts" 的应用程序:
cd authenticationPython manage.py startapp accounts我们将在 "accounts" 应用程序中处理用户身份验证和登录过程。设置 Django 配置在 "authentication/settings.py" 文件中,确保已经添加了 "accounts" 应用程序,并启用了身份验证中间件。你的配置应该类似于以下内容:
PythonINSTALLED_APPS = [ ... 'accounts', ...]MIDDLEWARE = [ ... 'Django.contrib.auth.middleware.AuthenticationMiddleware', ...]创建用户模型我们需要创建一个用户模型来存储用户的登录信息。在 "accounts/models.py" 文件中,添加以下代码:
Pythonfrom Django.db import modelsfrom Django.contrib.auth.models import ABStractUserclass User(ABStractUser): pass这里我们继承了 Django 自带的 ABStractUser 模型,以便拥有基本的用户属性和方法。创建用户注册和登录视图在 "accounts/views.py" 文件中,我们将创建用于处理用户注册和登录的视图函数。添加以下代码:
Pythonfrom Django.shortcuts import render, redirectfrom Django.contrib.auth import login, authenticatefrom .forms import RegistrationForm, LoginFormdef register(request): if request.method == 'POST': form = RegistrationForm(request.POST) if form.is_valid(): form.save() username = form.cleaned_data.get('username') password = form.cleaned_data.get('password1') user = authenticate(username=username, password=password) login(request, user) return redirect('home') else: form = RegistrationForm() return render(request, 'registration/register.html', {'form': form})def user_login(request): if request.method == 'POST': form = LoginForm(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 redirect('home') else: form = LoginForm() return render(request, 'registration/login.html', {'form': form})这里我们使用 Django 自带的用户认证系统中的 login 和 authenticate 方法来处理用户的登录过程。同时,我们还创建了一个注册视图函数,用于处理用户的注册过程。创建用户注册和登录表单在 "accounts/forms.py" 文件中,我们将定义用户注册和登录的表单。添加以下代码:Pythonfrom Django import formsfrom Django.contrib.auth.forms import UserCreationFormfrom .models import Userclass RegistrationForm(UserCreationForm): emAIl = forms.EmAIlField() class Meta: model = User fields = ('username', 'emAIl', 'password1', 'password2')class LoginForm(forms.Form): username = forms.CharField() password = forms.CharField(widget=forms.PasswordInput)这里我们使用 Django 自带的 UserCreationForm 表单类来定义注册表单,并创建了一个自定义的登录表单。创建模板文件在 "accounts/templates/registration" 目录中,创建以下模板文件:1. "register.html":html{% extends 'base.html' %}{% block content %} <h2>注册</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">注册</button> </form>{% endblock %}2. "login.html":html{% extends 'base.html' %}{% block content %} <h2>登录</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">登录</button> </form>{% endblock %}这里我们使用了 Django 的模板语法来渲染表单字段,并添加了一些基本的 HTML 元素。创建基本视图和 URL在 "accounts/views.py" 文件中,我们创建了一个基本的视图函数用于显示用户登录后的主页。添加以下代码:Pythonfrom Django.contrib.auth.decorators import login_required@login_requireddef home(request): return render(request, 'home.html')在 "authentication/urls.py" 文件中,添加以下代码来配置 URL 路由:
Pythonfrom Django.contrib import adminfrom Django.urls import path, includefrom accounts.views import register, user_login, homeurlpatterns = [ path('admin/', admin.site.urls), path('accounts/', include('Django.contrib.auth.urls')), path('accounts/register/', register, name='register'), path('accounts/login/', user_login, name='login'), path('home/', home, name='home'),]这里我们使用了 login_required 装饰器来保护需要登录的 URL,只有登录用户才能访问主页。使用 Ajax 处理需要登录的 URL在 "accounts/views.py" 文件中,我们将创建一个视图函数来处理 Ajax 请求,以验证用户是否已登录。添加以下代码:Pythonfrom Django.http import JSonResponsedef Ajax_login_required(request): if request.user.is_authenticated: return JSonResponse({'status': 'authenticated'}) else: return JSonResponse({'status': 'not_authenticated'})在 "authentication/urls.py" 文件中,添加以下代码来配置 Ajax URL 路由:Pythonfrom accounts.views import Ajax_login_requiredurlpatterns = [ ... path('Ajax/login_required/', Ajax_login_required, name='Ajax_login_required'),]编写前端代码在 "accounts/templates/home.html" 文件中,添加以下代码来编写前端页面:html{% extends 'base.html' %}{% block content %} <h2>主页</h2> 欢迎,{{ user.username }}!
<button id="logout-btn">注销</button> <script src="JS">https://code.jquery.com/jquery-3.6.0.min.JS</a>"></script> <script> $(document).ready(function() { $('#logout-btn').click(function() { $.Ajax({ url: '/accounts/logout/', type: 'POST', success: function() { window.location.reload(); } }); }); $.Ajax({ url: '/Ajax/login_required/', type: 'GET', success: function(response) { if (response.status === 'not_authenticated') { window.location.href = '/accounts/login/'; } } }); }); </script>{% endblock %}这里我们使用了 jQuery 库来处理 Ajax 请求,并在页面加载完成时发送一个请求来验证用户是否已登录。运行项目最后,运行以下命令来启动开发服务器:Python manage.py runserver然后在浏览器中访问 "http://localhost:8000/home/",你将看到一个需要登录的主页。如果你尝试访问主页,但尚未登录,则会自动重定向到登录页面。登录后,你将看到欢迎消息和一个注销按钮。通过本文,我们学习了如何在 Django 中进行用户身份验证,并使用 Ajax 技术来处理需要登录的 URL。身份验证是 Web 应用程序中不可或缺的功能之一,而 Ajax 技术可以增强用户体验,实现无刷新的登录验证。希望本文能帮助你更好地理解和应用这些技术。以上就是使用 Django 进行身份验证和 Ajax 处理需要登录的 URL 的详细步骤和案例代码。通过这些步骤,你可以快速搭建一个具有身份验证和无刷新登录验证功能的 Web 应用程序。祝你使用 Django 进行开发的愉快!
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号