基于Django用户认证系统详解

yizhihongxing

下面是关于“基于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 ORM模块使用方法

    Django ORM模块是什么 Django ORM是Django框架的核心模块之一,它是ORM(Object-Relational Mapping)技术的实现。 所谓ORM,是将关系型数据库中的表映射为Python代码中的类,使得开发者可以通过操作Python对象的方式来操作数据库。Django ORM可以让开发者轻松地进行数据库操作,不需要编写复杂的SQ…

    2023年3月11日
    00
  • Django中pycharm中 报错 —ValueError: The field admin.LogEntry.user was declared with a lazy reference to ‘system.sysuser’, bu

    问题是:已经在settings.py文件中注册过app仍旧提示没有安装,并且使用makegirations命令时会抛出如下异常 解决方法: 找到自己的python3.x,进入site-packages/django/contrib/admin/migrations文件目录下,除了__init__.py文件,其他的全 部删除。(注意,切勿把__init__.p…

    Django 2023年4月11日
    00
  • Django添加数据、查询数据(转载)

    2018年05月18日 00:00:00 瞿凯Kai 阅读数 766   添加数据 创建学生模型并添加学生数据 1.前文中已提及模型建立、数据库连接及文件迁移,此处省略 2.学生数据添加方法(写在views中) def add(requst): if request.method == ‘GET’: return render(request, ‘index…

    Django 2023年4月12日
    00
  • Django中的cookie与session操作

    添加cookie: def login(req): if req.method==”POST”: uf = UserInfoForm(req.POST) if uf.is_valid(): username = uf.cleaned_data[“username”] password = uf.cleaned_data[“password”] print u…

    Django 2023年4月10日
    00
  • django 修改 request 对象中的请求参数, 并重新赋值给 request 对象

    直接上代码, 实现流程看代码及注释 def your_view(self, request): method = request.method if method == “GET”: # 使用 querydict对象的copy()方法, 获取一个可修改的querydict data = request.GET.copy() # 修改参数值 data = pa…

    Django 2023年4月9日
    00
  • Django 自定义模型管理器(Manager)及方法

    转载自:https://www.cnblogs.com/sui776265233/p/11571418.html   1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager.每个Django模型至少有一个manager,你可以创建自定义manager…

    Django 2023年4月11日
    00
  • k8s-生产环境部署django项目k8s-dashboard管理系统

    1. k8s-生产环境部署django项目k8s-dashboard管理系统 gitee地址:https://gitee.com/scajy/django-k8s-dashboard.git 部署架构 nginx 前端web服务,接收到动态请求通过uwsgi模块将请求转发给uwsgi服务器,uwsgi服务器通过django处理完后返回给Nginx,Nginx…

    Django 2023年4月11日
    00
  • Django项目-创建第一个页面

    创建了blog应用后,再创建页面 1.编辑应用blog下的views.py   每个响应对应一个函数,函数必须返回一个响应   函数必须存在一个参数,一般约定为request   每一个响应对应一个URL    from django.http import HttpResponse def index(request):   return HttpResp…

    2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部