Django实现单用户登录的方法示例

下面是“Django实现单用户登录的方法示例”的完整攻略:

简述

简单单一用户系统是网络应用程序中的常见需求。为了降低开发成本和提高开发效率,一般采用现成的框架和工具进行开发。Django是一款开发Web应用程序的高级Python框架,提供了一系列功能齐备的组件,支持单一用户系统的快速开发。本文将介绍Django实现单用户登录的方法示例。

示例一:基于Django内置的User模型

Django内置了user模型,用于实现用户验证、权限管理等相关功能,可以方便地实现单一用户系统。下面是具体步骤:

  1. 在settings.py文件中添加以下代码:

AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)

这个是用内置的User模型实现的验证方法,如果在settings中没有这个配置,DJango会默认使用auth-core,与内置的User模型没有关系。

  1. 在urls.py文件中添加以下代码:

```
from django.contrib.auth.views import LoginView,LogoutView,PasswordResetView,PasswordChangeView
# import login_view to use google login
from account.views import change_password, profile
urlpatterns = [
path('login/', LoginView.as_view(template_name='account/login.html'), name='login'),
path('logout/', LogoutView.as_view(next_page='/'), name='logout'),
path('profile/', profile, name='profile'),
path('password-reset/', PasswordResetView.as_view(template_name='account/password_reset.html'),
'password_reset_done/', name='password_reset_done'),
path('password-change/', change_password, name='password_change'),
path('admin/password_change/', PasswordChangeView.as_view(), name='password_change'),
]

```

这里我们添加了一些关于用户登录等的路由,其中LoginView.as_view(template_name='account/login.html')就用于实现默认的登录页面(前提是已经创建好了页面)

  1. 创建一个登录表单。在Django中,可以使用内置的表单组件实现登录表单。首先,在forms.py文件中定义表单组件:

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

class UserLoginForm(AuthenticationForm):
username=forms.CharField(widget=forms.TextInput(attrs={'placeholder':'Username'}))
password=forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'Password'}))
```

这里我们使用了AuthenticationForm表单组件,并对其进行了定制化(更改了展示方式)。

  1. 创建登录页面。在templates目录下创建account/login.html文件,添加以下代码:

```
{% extends 'base.html' %}

{% block body %}

Login

{% csrf_token %}
{{ form.as_p }}

{% endblock %}
```

这里我们使用了base.html作为登录页面的基础模板,通过{{ form.as_p }}添加登录表单。

  1. 在视图函数中添加用户验证逻辑。在views.py文件中添加以下代码:

```
from django.contrib.auth.views import LoginView, LogoutView
from django.shortcuts import render, redirect
from django.contrib import messages
from account.forms import UserLoginForm

def login(request):
if request.method=='POST':
form=UserLoginForm(request.POST)
if form.is_valid():
username=request.POST['username']
password=request.POST['password']
user=authenticate(username=username, password=password)
if user is not None:
#如果用户验证通过,将用户对象添加到session中,表示用户已登录
login(request, user)
return redirect('home')
else:
messages.error(request,'用户名或密码错误')
else:
form=UserLoginForm()
return render(request,'account/login.html',{'form':form})
```

这里我们使用了authenticate方法进行用户验证,如果验证成功,调用login方法将用户添加到session中,表示用户已登录。

示例二:基于自定义User模型

如果需要实现更加个性化、灵活的用户系统,则可以自定义User模型。下面是具体步骤:

  1. 在models.py文件中定义自定义的User模型。首先,导入Django自带的BaseUserManager和AbstractBaseUser模块:

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

然后,编写UserManager和User两个模型:

```
class UserManager(BaseUserManager):
def create_user(self,email,password=None,extra_fields):
if not email:
raise ValueError('Email must be provided')
user=self.model(email=self.normalize_email(email),
extra_fields)
user.set_password(password)
user.save(using=self._db)
return user

   def create_superuser(self,email,password,**extra_fields):
       extra_fields.setdefault('is_staff',True)
       extra_fields.setdefault('is_superuser',True)
       return self.create_user(email,password=password,**extra_fields)

class User(AbstractBaseUser,PermissionsMixin):
email=models.EmailField(unique=True)
name=models.CharField(max_length=50,null=True)
is_active=models.BooleanField(default=True)
is_staff=models.BooleanField(default=False)
date_joined=models.DateTimeField(auto_now_add=True)

   USERNAME_FIELD='email'
   EMAIL_FIELD='email'

   objects=UserManager()

   def __str__(self):
       return self.email

```

  1. 配置settings.py文件,将新的User模型设为Django认证系统默认的用户模型。

AUTH_USER_MODEL='account.User'

  1. 创建一个注册表单。在forms.py文件中定义表单组件:

```
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model

User=get_user_model()

class UserRegistrationForm(UserCreationForm):
email=forms.EmailField(required=True,widget=forms.TextInput(attrs={'placeholder':'Email'}))
password1=forms.CharField(required=True, widget=forms.PasswordInput(attrs={'placeholder':'Password'}))
password2=forms.CharField(required=True, widget=forms.PasswordInput(attrs={'placeholder':'Confirm Password'}))

   class Meta:
       model=User
       fields=('email', 'password1', 'password2')

```

  1. 创建注册页面。在templates目录下创建account/register.html文件,添加以下代码:

```
{% extends 'base.html' %}

{% block body %}

Register

{% csrf_token %}
{{ form.as_p }}

{% endblock %}
```

  1. 在视图函数中添加用户信息保存逻辑。在views.py文件中添加以下代码:

```
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import AuthenticationForm
from account.forms import UserRegistrationForm

def register(request):
if request.method=='POST':
form=UserRegistrationForm(request.POST)
if form.is_valid():
user=form.save()
email=form.cleaned_data.get('email')
password=form.cleaned_data.get('password1')
user=authenticate(request, email=email, password=password)

           login(request,user)
           return redirect('home')
   else:
       form=UserRegistrationForm()
   return render(request,'account/register.html',{'form':form})

```

这里我们使用了自定义的User模型,用户注册成功后,将用户信息保存到数据库中,使用了authenticate方法进行用户验证,并调用login方法将用户添加到session中,表示用户已登录。

到此,我们完成了基于Django实现单一用户系统的方法示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django实现单用户登录的方法示例 - Python技术站

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

相关文章

  • Django权限机制实现代码详解

    下面是对“Django权限机制实现代码详解”的完整攻略,包括两个示例说明。 一、Django权限机制的概述 Django的权限机制允许开发者对不同用户(或用户组)授予不同的权限,以实现对应用程序访问的控制。Django自带的权限系统非常强大,能够满足大多数应用场景的要求。 在Django中实现权限控制需要掌握以下几个概念: 用户(User):指使用应用程序的…

    Django 2023年5月16日
    00
  • Python笔记(六)- 模型及Django站点管理

      在这篇博文中,将介绍django与数据库方面的交互的知识。首先在网上下载Python For MySQL,然后进行安装。安装成功之后,在setting.py文件中进行装载,如下: 1 DATABASES = { 2 ‘default’: { 3 ‘ENGINE’: ‘django.db.backends.mysql’, 4 ‘NAME’: ‘databa…

    Django 2023年4月12日
    00
  • Django中的缓存机制及其实现方法

    什么是缓存? 简单来说,缓存就是将计算结果或数据存储到内存或其他更快存储介质中,以便后续请求快速访问,提高性能和响应速度。类似的概念常被用于Web框架和数据库中,用以优化性能和响应速度。 Django中的缓存机制 Django提供了多个缓存选择和多种缓存技术,包括内存缓存,数据库缓存,文件系统缓存等。Django默认使用的是基于内存的缓存,在Django的s…

    Django 2023年3月13日
    00
  • 【Python web 开发】django rest framwork 的token 登录和原理

      背景: 有些接口比如提交订单,获取用户列表是要用到用户信息的,是要用户登录后才能进行的 用户登录在前后端分离系统中与我们之前基于模板template进行开发是有区别的 思考一个问题:为什么我们的django  rest framwork 会有登录和退出功能呢? 因为,这里有配置哦 这里有 login 和loginout,里面的 login 调用了logi…

    Django 2023年4月12日
    00
  • Python——Django-urls.py的作用

    一、urls.py的作用是保存路径和函数的对应关系 二、函数返回指定内容 from django.urls import path #引用HTTP协议的代码 from django.shortcuts import HttpResponse def yimi(request): #request参数保存了所有和用户浏览器请求相关的数据,返回指定内容 retu…

    Django 2023年4月10日
    00
  • Django框架models使用group by详解

    那么我将给出一个完整的攻略,讲解如何在 Django 框架中使用 group by。 什么是 group by? group by 操作是一种 SQL 语句,它把数据集合分成多个小组,并对每个小组执行聚集函数,例如计算总和、平均值、最小值等。在 Django 框架中使用 group by,可以对数据进行分组,并进行聚合计算,以得出想要的统计结果。 在 Dja…

    Django 2023年5月16日
    00
  • Django之路由层的实现

    下面我将为你详细讲解“Django之路由层的实现”的完整攻略。 一、Django路由层简介 Django的路由层是Django框架中的一个重要组成部分,主要负责请求的分发和处理。通过路由,Django能够将一个请求(包括请求的URL和参数)分发给不同的视图(Views)进行处理,并将处理结果返回给客户端。在Django中,路由的实现机制是基于URL模式和视图…

    Django 2023年5月16日
    00
  • Django 学习之CORS

    跨域 跨域指的就是“跨域资源共享(Cross-Origin Resource Sharing, CORS)”,是一个“W3C标准”,当一个资源从与该资源本身所在的服务器的不同域或者不同端口请求一个资源时,就会发起一个跨域HTTP请求。 说到跨域,肯定就要讲一下 同源策略(Same origin policy),该策略是由Netscape(网景)公司在1995…

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