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框架搭建的简易图书信息网站案例

    以下是关于“Django框架搭建的简易图书信息网站案例”的完整攻略,其中包含两个示例。 Django框架搭建的简易图书信息网站案例 Django是一个基于Python的Web框架,它可以帮助我们快速开发Web应用程序。本文将介绍如何使用Django框架搭建一个简易的图书信息网站。 实现步骤 实现一个简易的图书信息网站,需要遵循以下几个步骤: 创建Django…

    Django 2023年5月17日
    00
  • Django+Xadmin打造在线教育系统(二)

    基于xadmin的后台管理 先使用pip进行安装xadmin及其依赖包 pip install django-adminx 安装完成后卸载xadmin,保留依赖包即可 pip uninstall django-adminx 需要对源码进行修改,将xadmin的源码下载下来 https://github.com/sshwsfc/xadmin/tree/djan…

    Django 2023年4月13日
    00
  • python django 增删改查操作 数据库Mysql

    下面是详细讲解“python django 增删改查操作 数据库Mysql”的完整攻略。 简介 Python Django 是一种开源的 Web 框架,它利用了 Python 的强大功能和 MySQL 数据库的灵活性,在 Web 开发领域得到了广泛应用。本文将讲解如何使用 Django 进行 MySQL 数据库的增删改查操作,包括两个示例说明。 环境准备 在…

    Django 2023年5月16日
    00
  • Django(六)模型(model)系统 — 常用查询语法及进阶

    必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 <4> exclude(**kwa…

    Django 2023年4月11日
    00
  • 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example原作者:Antonio Melé 2016年12月10日发布(没有进行校对,有很多错别字以及模糊不清的语句,请大家见谅) 2017年2月7日精校完成(断断续续的终于完成了第一章精校,感觉比直接翻译还要累,继续加油) 2017年2月10日再次…

    Django 2023年4月11日
    00
  • Django+Vue打造购物网站(八)

    购物车、订单管理和远程调试 添加商品到购物车 trade/serializers.py from rest_framework import serializers from goods.models import Goods from trade.models import ShoppingCart class ShopCartSerializer(ser…

    Django 2023年4月9日
    00
  • Django admin组件的使用

    Django是一个非常流行的Python Web开发框架。它自带了一个非常强大的组件,称为Django admin。这个组件很容易使用,使得在无需编写控制面板代码的情况下,你就可以创建一个功能强大的控制面板。在本文中,我将详细讲解如何使用Django admin组件。 第一步:创建Django项目 首先,我们需要在本地机器上创建一个Django项目。使用以下…

    Django 2023年5月16日
    00
  • Django快速学习搭建blog项目

      新手学习Django,本文学习的文档是《Django Web开发指南》。好了我也是新手,没什么好说了,go!~ 首先先确定环境,我是在linux(Ubuntu14.04 gnome)下。 自带python2.7.6 我是用mysql数据库,没有的请下载 sudo apt-get install mysql-server-5.5 接下来准备下载Django…

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