Django实战之用户认证(用户登录与注销)

下面我将详细讲解一下“Django实战之用户认证(用户登录与注销)”的完整攻略,包含两条示例说明。

1. 创建Django项目

首先,我们需要在命令行中创建一个新的Django项目,可以通过以下命令实现:

django-admin startproject project_name

其中,project_name 是项目名,可以为任意名字。

接下来,我们进入项目所在的目录,并创建名为 accounts 的应用,可以使用以下命令:

cd project_name
python manage.py startapp accounts

2. 用户模型创建

accounts/models.py 中创建用户模型:

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin

class UserManager(BaseUserManager):
    def create_user(self, email, password=None, **kwargs):
        if not email:
            raise ValueError('Users must have an email address')

        user = self.model(email=self.normalize_email(email), **kwargs)
        user.set_password(password)
        user.save()

        return user

    def create_superuser(self, email, password=None, **kwargs):
        kwargs.setdefault('is_staff', True)
        kwargs.setdefault('is_superuser', True)

        return self.create_user(email, password, **kwargs)

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=256)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    objects = UserManager()

    def __str__(self):
        return self.email

    def get_full_name(self):
        return self.name

    def get_short_name(self):
        return self.name

3. 配置认证后端

project_name/settings.py 中添加如下代码,在支持 email 做用户名登录的同时,使用新创建的用户模型:

AUTH_USER_MODEL = 'accounts.User'

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend', # 默认认证后端
    'accounts.backends.EmailBackend', # 自定义认证后端
]

4. 编写自定义认证后端

在accounts/backends.py中,我们将编写自己的认证后端来支持通过电子邮件登录用户。示例代码如下:

from django.contrib.auth.backends import ModelBackend
from .models import User

class EmailBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            user = User.objects.get(email=username)
        except User.DoesNotExist:
            return None

        if user.check_password(password):
            return user
        else:
            return None

5. 编写登录和注销视图

accounts/views.py中,编写login和logout视图用于实现用户的登录和注销。示例代码如下:

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

def login_view(request):
    if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('password')

        user = authenticate(request=request, username=email, password=password)
        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            return render(request, 'login.html', {'error': 'Email and password combination is incorrect'})

    return render(request, 'login.html')

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

6. 编写登录页面

accounts/templates/login.html 中,编写登录页面,示例代码如下:

<form action="{% url 'login' %}" method="post">
    {% csrf_token %}
    <label for="email">Email</label>
    <input type="email" name="email" id="email" required>

    <label for="password">Password</label>
    <input type="password" name="password" id="password" required>

    {% if error %}
        <p>{{ error }}</p>
    {% endif %}

    <button type="submit">Login</button>
</form>

7. 注册URL

project_name/urls.py 中,注册 /login//logout/ URL,示例代码如下:

from django.urls import path
from . import views

urlpatterns = [
    path('login/', views.login_view, name='login'),
    path('logout/', views.logout_view, name='logout'),
]

至此,我们已经完成了 Django实战之用户认证(用户登录与注销) 的完整攻略,接下来我将给出两个示例:

示例一:用户通过邮件进行登录

用户通过邮件进行登录,可以在登录页面输入邮件地址和密码进行登录。

示例二:用户通过第三方服务进行登录

用户可以通过第三方服务,如社交媒体平台或Google OAuth等进行登录,可以采用Python第三方库如oauthlib或social-auth-app-django

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django实战之用户认证(用户登录与注销) - Python技术站

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

相关文章

  • django之创建app、静态文件static配置、orm介绍-57

    一.创建APP 在每一个django项目中可以包含多个APP,相当于一个大型项目中的分系统、子模块、功能部件等.互相之间比较独立,但也有联系. 在pycharm下方的Terminal终端中输入命令: python manage.py startapp app01 就可以创建一个名为app01的APP,django自动生成app01文件夹 创建好之后需要在se…

    Django 2023年4月11日
    00
  • Django 状态保持搭配与存储的实现

    Django中的状态保持指的是让服务器在客户端与服务器之间保留一些信息,以便在不同请求之间共享。常用的状态保持机制有Cookie和Session。存储机制则指为了让状态保持持续生效,需要将这些信息存储在服务器的某个地方。 一、Cookie实现状态保持 Cookie是最常用的状态保持机制,在Django中使用起来也非常简单。当用户首次访问网站时,Django服…

    Django 2023年5月16日
    00
  • Django序列化和反序列化

    1)在开发REST接口时,视图中做的最主要的三件事   将请求的数据(如:Json格式)转换为模型类对象(反序列化)  操作数据库  将模型类对象转换为响应的数据(如:Json格式)(序列化)(2)序列化   1)概念     将程序中的一个数据结构类型转化为其它格式(字典、json、XML等)。例如:将django中的模型类对象转换为json字符串,这个转…

    Django 2023年4月12日
    00
  • Django中的Request和Response

    接触Django这么久了,从来没有好好学习关于Django中的Request和Response对象。借着文件上传下载的相关工作,现在总结一下也不错。当一个页面请求过来,Django会自动创建一个Request对象,匹配URLconf中对应的view方法,并将这个Request对象作为第一个参数传递给view方法。而view方法会经过一系列操作之后,返回一个R…

    Django 2023年4月13日
    00
  • Django1.5+Python3.3下groundwork的使用

    因为要学习“心内求法”关于Django的教程,其中提到了groundwork的应用,因为django1.5(应该说1.4及以上)目录结构生成较之前发生了变化,再加上python3.x的语法也较python2.7有所差异,所以为了使用groundwork,还需要做一些适应性的修改。记录如下,作为备忘: (1) 下载groundwork: 在https://gi…

    Django 2023年4月16日
    00
  • Django自定义权限及用户分组

    下面是关于Django自定义权限及用户分组的完整攻略,包含了两条示例说明。 一、定义自己的权限 在Django中,每一个权限都是一个Permission对象,而权限的分类则是Permission对象的Groups。我们可以通过继承Django的 PermissionMixin 类来在我们的模型中定义自己的权限,并将其归类到我们自定义的 Group 对象中。 …

    Django 2023年5月16日
    00
  • Django HTML表单实例应用

    Django HTML表单是Web开发中非常重要的一个部分,用于收集用户信息或者输入数据。在这篇文章中,我们将详细介绍Django HTML表单实例应用的方法并提供代码示例。 创建Django项目 首先,我们需要创建一个Django项目。如果没有安装Django,可以先进行安装。 django-admin startproject myproject 创建应…

    Django 2023年3月12日
    00
  • pycharm、Django+node.js、vue搭建web项目

    参考文章:https://www.wandouip.com/t5i35466/  在此感谢 本篇接着上一篇:windows10使用npm安装vue、vue-cli  首先Django项目是搭建好的,就是新建一个Django项目,然后建一个app 在terminal运行命令:vue-init webpack vuepro   其中vuepro是我web前端项目…

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