django实现用户登陆功能详解

下面详细讲解“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 之数据库模块

    前提ajango的 数据库主要是为了存取网站的一些内容,数据库的设置一般放在model.py 下   目录下   我们设置如下的数据库:具体的代码如下面所示: 1 # -*- coding: utf-8 -*- 2 import pdb 3 from django.db import models 4 from django.contrib.auth.mod…

    Django 2023年4月9日
    00
  • Django 中related_name,”%(app_label)s_%(class)s_related”

    先看个model   1 from django.db import models 2 3 # Create your models here. 4 5 6 class Parent(models.Model): 7 name = models.CharField(max_length=64, verbose_name=u’姓名’) 8 id_num = m…

    Django 2023年4月11日
    00
  • Django+python服务器部署与环境部署教程详解

    下面是详细的Django+python服务器部署与环境部署教程详解。 环境准备 在开始前,我们需要安装以下软件和工具: Python3.x pip3 virtualenv Git Nginx Supervisor 创建Django项目 首先,通过以下命令创建新的Django项目: $ django-admin.py startproject myprojec…

    Django 2023年5月16日
    00
  • 创建Django项目图文实例详解

    我来详细讲解一下如何创建一个Django项目的攻略过程,以及包含其中的两条示例说明。 创建Django项目的步骤 在开始创建Django项目之前,确保你已经安装好了Python和Django,可以通过以下命令查看是否已经安装Django: django-admin –version 如果没有安装,可以使用pip命令安装: pip install djang…

    Django 2023年5月16日
    00
  • Django项目如何正确配置日志(logging)

    配置日志(logging)是Django项目创建的过程中非常重要的一步。它可以帮助我们更好地监控应用的行为和性能,从而更快地发现问题并解决它们。下面是一个步骤: 第一步:安装依赖 在创建Django项目之前,请确保你已经安装了Python logging模块。你可以使用pip命令安装依赖: pip install logging 第二步:创建日志记录器 在D…

    Django 2023年5月16日
    00
  • django 认证类配置实现

    下面是关于 Django 认证类配置实现的完整攻略,包含两条示例说明。 什么是 Django 认证类? Django 认证类是 Django 框架提供的一种认证机制,可以用于对用户进行认证。它可以让开发者快速的添加用户身份验证和授权功能,让开发者专注于业务开发。 认证类配置实现 接下来,我们将介绍如何在 Django 中使用认证类进行身份验证的配置实现。共有…

    Django 2023年5月16日
    00
  • Django学习之路之请求与响应

    针对您提出的问题,本篇回答将主要包括以下几个部分: 理解请求和响应的含义及基本原理; 掌握Django框架中HTTP请求和响应的相关知识; 示例说明,演示Django中请求与响应的实现方法。 1. 请求和响应的含义及基本原理 在Web应用中,浏览器向服务器发送数据,服务器会处理这些数据,然后再返回给浏览器一些数据,这个过程就称为请求和响应。 请求(Reque…

    Django 2023年5月16日
    00
  • celery在Django中的使用

      前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务。在同事的指引下接触了Celery这个异步任务队列框架,鉴于网上关于Celery和Django结合的文档较少,大部分也只是粗粗介绍了大概的流程,在实践过程中还是遇到了不少坑,希望记录下来帮助有需要的朋友。…

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