基于Django用户认证系统详解

下面是关于“基于Django用户认证系统详解”的完整攻略,包含两条示例说明。

什么是Django用户认证系统?

Django用户认证系统是Django框架提供的一个内置模块,它可以帮助我们轻松地实现用户认证、授权和管理等功能。

Django用户认证系统的使用

准备工作

首先,我们需要创建一个Django项目,并且在settings.py文件中将'django.contrib.auth'添加到INSTALLED_APPS中,以启用Django用户认证系统。

INSTALLED_APPS = [
    ...
    'django.contrib.auth',
    ...
]

然后运行以下命令,以创建Django用户认证系统所需的数据表:

python manage.py migrate

注册用户

要在Django用户认证系统中注册用户,我们可以使用以下代码:

from django.contrib.auth.models import User

# 创建一个新用户
user = User.objects.create_user('username', 'email', 'password')

这里的'username'是要注册的用户名,'email'是用户的电子邮件地址,'password'是用户的密码。

用户登录

要在Django用户认证系统中实现用户登录,我们可以使用以下视图函数:

from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect

def user_login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            return render(request, 'login.html', {'error': 'Invalid Login Credentials'})
    else:
        return render(request, 'login.html')

这里我们首先使用authenticate()函数来验证用户的用户名和密码是否正确,如果验证通过,我们就使用login()函数将用户登录,并且重定向到home页面,如果验证失败,我们就返回一个包含错误消息的登录页面。

用户登出

要在Django用户认证系统中实现用户注销,我们可以使用以下视图函数:

from django.contrib.auth import logout
from django.shortcuts import render, redirect

def user_logout(request):
    logout(request)
    return redirect('home')

这里我们只需要使用logout()函数将用户登出,并且重定向到home页面。

示例说明

示例1:注册和登录

以下是一个简单的示例,演示如何使用Django用户认证系统进行注册和登录。

  1. 首先,我们创建一个名为“auth_demo”的Django项目,并将'django.contrib.auth'添加到INSTALLED_APPS中。然后运行“python manage.py migrate”命令,以创建Django用户认证系统所需的数据表。

  2. 然后,我们创建一个包含注册和登录视图函数的auth/views.py文件。

from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render, redirect
from django.contrib.auth.models import User

def user_register(request):
    if request.method == 'POST':
        username = request.POST['username']
        email = request.POST['email']
        password = request.POST['password']
        user = User.objects.create_user(
            username=username,
            email=email,
            password=password
        )
        login(request, user)
        return redirect('home')
    else:
        return render(request, 'register.html')

def user_login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            return render(request, 'login.html', {'error': 'Invalid Login Credentials'})
    else:
        return render(request, 'login.html')

def user_logout(request):
    logout(request)
    return redirect('home')
  1. 然后,我们创建一个包含注册和登录表单的auth/templates文件夹,并分别在其中创建register.html和login.html模板文件。以下是register.html模板文件的示例代码:
{% extends 'base.html' %}

{% block content %}
  <form method="post">
    {% csrf_token %}
    <div>
      <label for="username">Username:</label>
      <input type="text" name="username" required>
    </div>
    <div>
      <label for="email">Email:</label>
      <input type="email" name="email" required>
    </div>
    <div>
      <label for="password">Password:</label>
      <input type="password" name="password" required>
    </div>
    <button type="submit">Register</button>
  </form>
{% endblock %}

以下是login.html模板文件的示例代码:

{% extends 'base.html' %}

{% block content %}
  {% if error %}
    <p>{{ error }}</p>
  {% endif %}
  <form method="post">
    {% csrf_token %}
    <div>
      <label for="username">Username:</label>
      <input type="text" name="username" required>
    </div>
    <div>
      <label for="password">Password:</label>
      <input type="password" name="password" required>
    </div>
    <button type="submit">Login</button>
  </form>
{% endblock %}

这里的templates/base.html文件是一个包含网站标题和基本样式的通用模板文件。

  1. 最后,我们创建一个包含home视图函数的auth/views.py文件,并创建home.html模板文件。以下是home视图函数的示例代码:
from django.shortcuts import render

def home(request):
    return render(request, 'home.html')

以下是home.html模板文件的示例代码:

{% extends 'base.html' %}

{% block content %}
  {% if user.is_authenticated %}
    <h2>Welcome, {{ user.username }}</h2>
    <p><a href="{% url 'user_logout' %}">Logout</a></p>
  {% else %}
    <p><a href="{% url 'user_register' %}">Register</a></p>
    <p><a href="{% url 'user_login' %}">Login</a></p>
  {% endif %}
{% endblock %}

这里的{% if user.is_authenticated %}代码块是一个用于检查用户是否已经登录的模板标签。如果用户已经登录,我们就显示一个欢迎消息和一个注销链接,否则就显示一个注册链接和一个登录链接。

示例2:使用装饰器限制访问权限

以下示例演示如何使用装饰器限制用户的访问权限。

  1. 在auth/views.py文件中,我们添加一个叫做“user_only”的装饰器函数。如果用户已经登录,我们就允许他们访问资源,否则就重定向到登录页面。
from django.contrib.auth.decorators import login_required

@login_required(login_url='user_login')
def secret_page(request):
    return render(request, 'secret.html')

这里的@login_required装饰器函数会检查用户是否已经登录。如果用户已经登录,我们就允许他们访问secret_page视图函数,否则就重定向到user_login视图函数。

  1. 然后我们在auth/templates文件夹中创建一个secret.html模板文件。
{% extends 'base.html' %}

{% block content %}
  <h2>Secret Page</h2>
  <p>This is a secret page that only logged in users can access.</p>
{% endblock %}
  1. 最后,我们修改auth/templates/home.html模板文件,添加一个指向secret_page视图函数的链接。
{% extends 'base.html' %}

{% block content %}
  {% if user.is_authenticated %}
    <h2>Welcome, {{ user.username }}</h2>
    <p><a href="{% url 'user_logout' %}">Logout</a></p>
    <p><a href="{% url 'secret_page' %}">Secret Page</a></p>
  {% else %}
    <p><a href="{% url 'user_register' %}">Register</a></p>
    <p><a href="{% url 'user_login' %}">Login</a></p>
  {% endif %}
{% endblock %}

现在,当用户点击“Secret Page”链接时,我们就会检查用户的登录状态,并且将他们重定向到登录页面,如果用户已经登录,我们就允许他们访问secret_page视图函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Django用户认证系统详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • django FileFIeld和ImageField 上传路径改写

    def get_file_path(instance, filename): return ‘file/document/%s/%s/%s’ % (instance.period.code, instance.student.college.code, filename) class Document(models.Model): title = model…

    Django 2023年4月9日
    00
  • 在Django中管理Users和Permissions以及Groups的方法

    在Django中,我们可以使用内置的应用程序django.contrib.auth来管理用户、权限和组。以下是管理这些实体的方法的详细攻略: 用户管理 在您的Django项目中启用 django.contrib.auth 应用程序。 创建一个用户。您可以使用Django内置的 create_user() 或 create_superuser() 函数来创建一…

    Django 2023年5月16日
    00
  • 解决django报错:.accepted_renderer not set on Response

    报错如图: 报错原型:视图函数继承错误: 解决:继承 rest_framework.views  里面的APIView

    Django 2023年4月12日
    00
  • Python笔记(五)–Django中使用模板

      使用Django开发网站时,如果不使用模板,那么将会很不合理。因为我们所有的html代码都需要被硬编码到我们的Python代码中。我们新建一个工程,然后再在新建一个应用程序,并在其中的views.py文件中添加如下代码: 1 #coding=UTF-8 2 from django.http.response import HttpResponse, Ht…

    Django 2023年4月12日
    00
  • Django路由系统-URL命名&URL反向解析

    前言 起始样式,HTML中的href是写死的,不能更改,如下示例代码: # urls中 urlpatterns = [ url(r’^admin/’, admin.site.urls), url(r’^jjzz/$’, views.JJzz.as_view()), url(r’^jjzz_index/$’, views.Index.as_view()), u…

    Django 2023年4月9日
    00
  • Python Django开发 1

    先配置个虚拟环境,在Flask第一篇文章有写,这里就跳过了 比如我的Django的目录是:C:\Workspaces\DjangoDemo,已经安装好了名为venv虚拟目录,接下来安装django框架,在虚拟环境状态下输入:pip install django即可 接下来创建一个Django项目的解决方案 虚拟环境下cd到C:\Workspaces\Djan…

    Django 2023年4月16日
    00
  • django中itsdangerous的用法

     itsdangerous用来解决什么问题,为什么需要用到itsdangerous? 安装命令:pip install itsdangerous 有时候你想向不可信的环境发送一些数据,但如何安全完成这个任务呢?解决的方法就是签名。使用只有你自己知道的密钥,来加密签名你的数据,并把加密后的数据发给别人。当你取回数据时,你就可以确保没人篡改过这份数据。 诚然,接…

    Django 2023年4月10日
    00
  • python3.8+django2+celery5.2.7环境准备(python测试开发django)

    下面是关于“python3.8+django2+celery5.2.7环境准备”的完整攻略。 一、环境准备 下载Python3.8 在Python官网上下载Python3.8的安装包并安装,或者通过apt、yum等包管理工具进行安装。 安装并配置virtualenv virtualenv是一个可以创建虚拟Python环境的工具,并且可以在不同的项目中使用不同…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部