django实现用户登陆功能详解

yizhihongxing

下面详细讲解“Django实现用户登录功能”的完整攻略:

1. 创建Django项目

首先,我们需要先创建一个Django项目。在命令行中执行如下命令:

django-admin startproject myproject

这将会创建一个名为 "myproject" 的Django项目。

2. 创建应用

接下来,我们需要创建一个应用,用来实现用户登录功能。在命令行中执行如下命令:

python manage.py startapp login

这将会创建一个名为 "login" 的Django应用。

3. 创建用户模型

创建用户模型可以使用 Django 内置的AbstractBaseUserAbstractUser类,这里我们使用 AbstractUser 类。

login/models.py 中添加如下代码:

from django.contrib.auth.models import AbstractUser

class User(AbstractBaseUser):
    username = models.CharField(max_length=40, unique=True)
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=128)
    ...

    USERNAME_FIELD = 'username'

    class Meta:
        verbose_name_plural = 'Users'

    def __str__(self):
        return self.username

这里我们自定义了用户模型,包含了用户名、邮箱和密码等字段,同时继承了 Django 的 AbstractUser 类。我们还设置了USERNAME_FIELD属性为"username",表示我们使用用户名来作为登录的唯一标识。

4. 创建用户表单

login/forms.py 中添加如下代码:

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class LoginForm(AuthenticationForm):
    username = forms.CharField(label='用户名', max_length=40)
    password = forms.CharField(label='密码', widget=forms.PasswordInput)

    class Meta:
        fields = ('username', 'password')

我们继承了 Django 自带的 AuthenticationForm 类,并自定义了表单的 labelwidget,用来渲染表单的样式。

5. 创建登录视图

login/views.py 中添加如下代码:

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

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('home')
            else:
                form.add_error('username', '用户名或密码错误')
    else:
        form = LoginForm()

    return render(request, 'login/login.html', {'form': form})

这里我们创建了一个登录视图函数,接收用户提交的表单数据进行验证,并调用 Django 内置的 authenticate 方法进行身份验证,如果通过验证,则调用 Django 内置的 login 方法登录用户。

同时,我们在 render 函数中返回了 login.html 模板,并将表单数据 form 传递给了模板,用来渲染表单。

6. 创建登录模板

login/templates/login/login.html 中添加如下代码:

{% extends 'base.html' %}

{% block content %}
  <h1>用户登录</h1>
  <form method="post">
    {% csrf_token %}
    {{ form.username.label_tag }}
    {{ form.username }}
    {{ form.password.label_tag }}
    {{ form.password }}
    {{ form.errors }}
    <button type="submit">登录</button>
  </form>
{% endblock %}

这里我们在模板中使用 Django 内置的模板语言来渲染表单,使用了 {{ form.username }}{{ form.password }} 来渲染表单的输入框,使用了 {{ form.errors }} 来渲染表单的错误信息。

示例说明1

在登录视图中,我们使用了LoginForm来验证用户输入的信息。为了防止用户随意输入其他属性,导致信息泄露,我们在LoginForm中添加Meta属性,指定了需要传入的属性。

class LoginForm(AuthenticationForm):
    username = forms.CharField(label='用户名', max_length=40)
    password = forms.CharField(label='密码', widget=forms.PasswordInput)

    class Meta:
        fields = ('username', 'password')

示例说明2

在用户模型中,我们使用了AbstractUser类,继承该类之后,我们只需加入自定义的属性即可。

from django.contrib.auth.models import AbstractUser

class User(AbstractBaseUser):
    username = models.CharField(max_length=40, unique=True)
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=128)
    ...

    USERNAME_FIELD = 'username'

    class Meta:
        verbose_name_plural = 'Users'

    def __str__(self):
        return self.username

继承AbstractUser类后,Django会自动为我们创建了许多内置的模型方法和管理员权限。同时,由于我们添加了USERNAME_FIELD属性,Django会自动将该属性作为用于检查的唯一标识。

以上就是“Django实现用户登录功能”的完整攻略。希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django实现用户登陆功能详解 - Python技术站

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

相关文章

  • 详解Django自定义过滤器方法(详细步骤)

    Django自定义过滤器是指在模板中使用自定义函数来处理模板变量。在模板中使用过滤器,可以方便的对变量进行格式化、筛选、排序等操作,以达到更好的显示效果。 下面是实现自定义过滤器的完整攻略,包括代码示例: 定义过滤器函数 定义过滤器函数时需要遵循以下规则: 函数名必须以“filter_”为前缀; 函数的第一个参数必须是要处理的变量; 函数可以有任意数量的参数…

    Django 2023年3月12日
    00
  • 基于Django的Admin后台实现定制简单监控页

    基于Django的Admin后台可以实现简单监控页,下面我将详细讲解如何实现。 准备工作 首先,需要在Django项目中创建一个app,用于管理监控页相关功能。在app目录下创建一个名为admin_dashboards的app。 添加监控模型 在admin_dashboards目录下打开models.py文件,定义一个监控模型用于存储需要监控的数据。 示例代…

    Django 2023年5月16日
    00
  • Python的Django框架中使用SQLAlchemy操作数据库的教程

    确实可以在Django中使用SQLAlchemy来操作数据库,下面是完整攻略: 安装SQLAlchemy和psycopg2库 在Django项目的虚拟环境中执行以下命令: pip install SQLAlchemy psycopg2 Django中设置数据库连接 在Django的settings.py中配置数据库连接参数,如下所示: DATABASES =…

    Django 2023年5月16日
    00
  • Django笔记十七之group by 分组用法总结

    本文首发于微信公众号:Hunter后端原文链接:Django笔记十七之group by 分组用法总结 这篇笔记介绍 Django 里面 model 的 group by 对应的一些操作。 用到的 Model 如下: class TestModel(models.Model): num = models.IntegerField() user_id = mod…

    2023年4月10日
    00
  • 解决Django中多条件查询的问题

    针对您的问题“解决Django中多条件查询的问题”的攻略,我将从以下几个方面进行详细讲解: 多条件查询的问题概述 基于Q对象的多条件查询 基于Filter对象链式调用的多条件查询 示例说明 总结 1. 多条件查询的问题概述 在Django中处理多条件查询时,常见的问题是如何同时满足多个查询条件。比如说,需要查询满足某个条件A和某个条件B的记录,这时需要用到多…

    Django 2023年5月16日
    00
  • Django 执行 makemigrations 显示 No changes detected in app

    在Django项目配置一下多数据库,但是运行 makemigrations 执行不正常 $ python manage.py makemigrations polls No changes detected in app ‘polls’   models.py 代码: class Question(models.Model): question_text =…

    Django 2023年4月10日
    00
  • Django中 from django.utils import timezone 和import datetime的区别

    在现实环境中,存在多个时区,用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统,所以如果网站面向的是多个时区用户,只以当前时间为标准开发,便会在时间上产生错误。 为解决这个此类问题,在代码和数据库中统一使用 UTC 时间,仅在与最终用户进行交互时使用本地时间是一个很好的办法 。Django 默认关闭时区支持,开启时区支持,需要在 set…

    Django 2023年4月12日
    00
  • 在SAE上部署Python的Django框架的一些问题汇总

    下面是部署Python的Django框架在SAE上的一些问题汇总的完整攻略和两个示例说明。 1. 环境搭建 首先,需要在本地安装 Django 和 mysqlclient。可以使用以下命令: pip install django pip install mysqlclient 如果报错,可以尝试使用以下命令: pip install django –use…

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