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

yizhihongxing

下面是“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 查询中统计总数、最新纪录和空值判断等功能。 count in_bulk latest、earliest first、last exists contains、icontains gt、gte、lt、lte startswith、istartswith isnull 1、count 返回查询的 QuerySet 的总数。 比如…

    2023年4月10日
    00
  • Django Rest framework 框架

    一、开发模式:     1. 普通开发方式(前后端放在一起写)   2. 前后端分离(前后台通过ajaxo交互)     后端(django rest framework写的) <—-ajaxo—>  前端(vue写的) <—– >  用户     好处:   二、后端开发     为前端提供url(API的开发或者接口…

    Django 2023年4月13日
    00
  • django基础知识之认识MVT MVC:

         MVT Django是一款python的web开发框架 与MVC有所不同,属于MVT框架 m表示model,负责与数据库交互 v表示view,是核心,负责接收请求、获取数据、返回结果 t表示template,负责呈现内容到浏览器 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代…

    Django 2023年4月13日
    00
  • Python Django ORM与模型详解

    “Python Django ORM与模型详解”的完整攻略可以分为以下几个部分: 1. 概述 Django是一套MVC框架,它提供了ORM(Object-Relational Mapping)技术,ORM可以将数据库中的表结构映射成Python类,这样我们在Python中就可以使用类来操作数据库。 2. 配置 要使用Django ORM,我们首先需要在set…

    Django 2023年5月16日
    00
  • Django – 模型表单(创建、更新、删除)

      urls.py # /music/alubm/add/ url(r’^album/add/$’, views.AlbumCreate.as_view(), name=”album-add”),   # /music/alubm/3/update/   url(r’^album/(?P<pk>\d+)/update/$’, views.Albu…

    Django 2023年4月11日
    00
  • Django视图类型总结

    首先介绍一下Django视图类型。在Django应用程序中,视图是用于处理HTTP请求的Python函数或方法。视图接收HTTP请求并返回HTTP响应。Django支持许多类型的视图,如函数视图、类视图和通用视图等。 下面,分别介绍几种常见的Django视图类型及其常用场景。 函数视图 函数视图是最常见的Django视图类型。它们是用Python编写的函数,…

    Django 2023年5月16日
    00
  • django FileFIeld和ImageField 上传路径改写

    def get_file_path(instance, filename): return ‘file/document/%s/%s/%s’ % (instance.period.code, instance.student.college.code, filename) class Document(models.Model): title = model…

    Django 2023年4月9日
    00
  • Django如何将自己的网站让其他主机访问

    ##第一点: 需要在你的setting.py文件中将按照如下设置: ALLOWED_HOSTS = [‘127.0.0.1’, ‘192.168.1.102’] 192.168.1.102是Django所在机器的IP  (此段验证未成功:或者在中括号中加入你在局域网中的IP。如我在局域网中的IP为192.168.10.133 所以设置ALLOWED_HOST…

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