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部署到服务器使用manage.py runserver简单测试

    第一次把django项目部署到云服务器,为的是想快速看下远程访问效果,却意想不到踩中了好多坑 说明一下,用于生产的项目推荐使用nginx+uWSGI+virtualenv+django的,原因如下: https://www.cnblogs.com/duanlinxiao/p/10395946.html  本文只是说明真实生产的其中一步,将django代码快速…

    Django 2023年4月11日
    00
  • python框架django基础指南

    下面将详细讲解关于“Python框架Django基础指南”的完整攻略及示例说明。 Python框架Django基础指南 简介 Django是一款使用Python编写的高级Web框架,采用了MVC模式(即Model-View-Controller模式),旨在帮助开发方便快捷地创建复杂、动态的Web应用程序。Django也是非常适合使用REST API构建的。 …

    Django 2023年5月16日
    00
  • 详解django中的collectstatic命令以及STATIC_URL、STATIC_ROOT配置

      转:https://blog.csdn.net/weixin_36296538/article/details/83153070 前言: 最近在琢磨django框架的使用,在上传个人网站服务器上时,再次遇到了找不到静态文件,css、img等样式全无的问题。于是沉下心来,好好研究了django的静态文件到底应该怎么去部署(deploy),一点心得体会现分享…

    Django 2023年4月11日
    00
  • Django框架中视图的用法

    请看下面的完整攻略。 1. Django框架中视图的作用 在Django框架中,视图(View)是一个Python函数或方法,用于处理一个HTTP请求和返回一个HTTP响应。Django框架中的MVT(Model-View-Template)模式中,视图是控制器(Controller)的角色,用于将用户请求和模型交互,从而响应用户的请求。 通俗点理解,可以把…

    Django 2023年5月16日
    00
  • python3.6+django2.0开发一套学员管理系统

    下面是“python3.6+django2.0开发一套学员管理系统”的完整攻略。 1.环境准备 首先需要在本地安装Python3.6,并且安装Django2.0以及其他必要的扩展库,如Pillow,Django-crispy-forms等。可以通过以下命令完成环境准备: # 安装Python3.6 $ sudo apt-get install python3…

    Django 2023年5月16日
    00
  • Django模板变量使用方式详解

    Django是一款功能强大的Python Web框架,它的模板变量是模板中最为重要和灵活的元素之一。 模板变量是一些用于在模板中呈现动态数据的Python表达式。在Django模板中,模板变量可以代表任何数据类型,例如数字、字符串、变量、对象、列表、元组和字典等。 Django模板变量的语法很简单,使用双花括号{{}}将变量包裹。当模板引擎运行时,它会将双花…

    Django 2023年3月12日
    00
  • pycharm断点调试django

    1、打开你的工程,在菜单栏里找到Run–>Edit Configurations 2、在打开的对话框里边选择Python,点击”+”号 3.选择python 4、出现了一个新的项Unnamed,你可以把它改名叫debug,好听一点 5、脚本选择你网站的manage.py,脚本参数用runserver,跟你平常用命令行是一样的,聪明的同学应该已经发现了…

    Django 2023年4月13日
    00
  • Django create和save方法

    Django的模型(Model)的本质是类,并不是一个具体的对象(Object)。当你设计好模型后,你就可以对Model进行实例化从而创建一个一个具体的对象。Django对于创建对象提供了2种不同的save与create方法,我们来仔细分析下这两种方式有什么不同。 我们来先看看下面这个例子。我们已经设计好了一个Person的模型(如下)。 from djan…

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