django认证 auth

auth的引入:

form django.contrib import auth

django自带了一个orm系统,可以注册数据库后

进行python manage.py createsuperuse   超级用户

python manage.py createuser  普通

auth认证:

from django.contrib import auth

注册用户,同上

认证用户

user =auth. authenticate(request, username=username, password=pwd)  获取到对象和数据库中的匹配

获取到user对象,没有返回None

保存登录状态:

写到session中

auth.login(request,user) 会自动生成

注销:

删除用户的session

auth.logout(request)

注意在执行命令前要先在setting中写入,自定义必须加上:

LOGIN_URL = ‘/login/‘  # 这里配置成你项目登录页面的路由

主页加装饰器,登录后方能查看,

from django.contrib.auth.decorators import login_required

给函数加上 login_required

print(request.user.is_authenticated()) #查看登录的状态flase 和true

from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):

from django.contrib.auth.models import User,AbstractUser# 不加字段的时候用系统的

如果要加入新的字段,那么我们要将,扩展系统的表:

修改数据库:

from django.contrib.auth.models import AbstractUser  #引入django的class

class UserInfo(AbstractUser):  #必须要继承

phone = models.CharField(max_length=11,)

1,from app01.models import UserInfo #加了字段,使用自己定义的

2,在setting中加入:

AUTH_USER_MODEL = "app01.UserInfo"  #这里的是自己定义的

create_user()

创建用户的方法:

from django.contrib.auth.models import User
user = User.objects.create_user(username=‘用户名‘,password=‘密码‘,email=‘邮箱‘,...)

create_superuser()

创建超级用户:

from django.contrib.auth.models import User
user = User.objects.create_superuser(username=‘用户名‘,password=‘密码‘,email=‘邮箱‘,...)

注意将邮箱加上,超级必须要加,设置成空即可

check_password(password)

密码是否正确,需要提供当前请求用户的密码

密码正确返回True 错误为False

ok = user.check_password(‘密码‘)

set_password(password):

修改密码的方法,接收要设置新的密码作为参数

设置完一定要调用用户的save方法

用法:"

user.set_password(password=‘‘)
user.save()

一个修改密码功能的简单示例:

@login_required
def set_password(request):
    user = request.user
    err_msg = ‘‘
    if request.method == ‘POST‘:
        old_password = request.POST.get(‘old_password‘, ‘‘)
        new_password = request.POST.get(‘new_password‘, ‘‘)
        repeat_password = request.POST.get(‘repeat_password‘, ‘‘)
        # 检查旧密码是否正确
        if user.check_password(old_password):
            if not new_password:
                err_msg = ‘新密码不能为空‘
            elif new_password != repeat_password:
                err_msg = ‘两次密码不一致‘
            else:
                user.set_password(new_password)
                user.save()
                return redirect("/login/")
        else:
            err_msg = ‘原密码输入错误‘
    content = {
        ‘err_msg‘: err_msg,
    }
    return render(request, ‘set_password.html‘, content)

user属性的问题:

user 对象属性:username,password

is_staff 用户是否有网站的管理权限

is_active:是否允许用户登录,设置为False,可以在不删除用户的前提下禁止用户登录

实例:

uls:

from django.conf.urls import url

from django.contrib import admin

from app01 import views

urlpatterns = [

url(r‘^admin/‘, admin.site.urls),

url(r‘^login/‘, views.login),

url(r‘^index/‘, views.index),

url(r‘^logout/‘, views.logout),

url(r‘^reg/‘, views.reg),

]

views:

from django.shortcuts import render, HttpResponse, redirect

from django.contrib import auth

from django.contrib.auth.decorators import login_required

from app01.forms import RegForm

from django.contrib.auth.models import User,AbstractUser

def login(request):

error_msg = ‘‘

if request.method == ‘POST‘:

username = request.POST.get(‘username‘)

pwd = request.POST.get(‘pwd‘)

# 对提交的数据进行认证

obj = auth.authenticate(request, username=username, password=pwd)

if obj:

# 登录成功

auth.login(request, obj)

return redirect(‘/index‘)

else:

error_msg = ‘用户名或密码错误‘

# 返回一个页面让登录

return render(request, ‘login.html‘, {‘error_msg‘: error_msg})

@login_required

def index(request):

print(request.user.is_authenticated())

return render(request, ‘index.html‘)

def logout(request):

auth.logout(request)

return redirect(‘/login/‘)

def reg(request):

form_obj = RegForm()

if request.method == ‘POST‘:

form_obj = RegForm(request.POST)

if form_obj.is_valid():

form_obj.cleaned_data.pop(‘re_password‘)

# 创建普通用户

User.objects.create_user(**form_obj.cleaned_data)

# User.objects.create_superuser(**form_obj.cleaned_data,email=‘‘)

# return redirect(‘/login/‘)

obj = auth.authenticate(request, **form_obj.cleaned_data)

auth.login(request, obj)

return redirect(‘/index/‘)

return render(request, ‘reg.html‘, {‘form_obj‘: form_obj})

login.html:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta http-equiv="x-ua-compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Title</title>

</head>

<body>

<form action="" method="post" autocomplete="off" novalidate>

{% csrf_token %}

<p>

用户名:

<input type="text" name="username">

</p>

<p>

密码:

<input type="password" name="pwd">

</p>

<p>

<button>登录</button>

</p>

<p>

<span>{{ error_msg }}</span>

</p>

</form>

</body>

</html>

setting:

LOGIN_URL = ‘/login/‘  # 这里配置成你项目登录页面的路由

AUTH_USER_MODEL = "app01.UserInfo"

models:

from django.db import models

from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):

phone = models.CharField(max_length=11, )

forms:

from django import forms

class RegForm(forms.Form):

username = forms.CharField(

label=‘用户名‘

)

password = forms.CharField(

label=‘密码‘,

widget=forms.widgets.PasswordInput()

)

re_password = forms.CharField(

label=‘确认密码‘,

widget=forms.widgets.PasswordInput()

)

reg.html:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta http-equiv="x-ua-compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Title</title>

</head>

<body>

<form action="" method="post">

{% csrf_token %}

{{ form_obj.as_p }}

<button>注册</button>

</form>

</body>

</html>

原文地址:https://www.cnblogs.com/lnrick/p/9712885.html

时间: 2024-08-30 09:57:15

django认证 auth的相关文章

django的auth认证,is_authenticate 和装饰器的2个方法,注销的功能,

在django中创建表,会自动创建一些django自带的表,先了解用户认证, 认证登录  先要引用  , from django.contrib import auth 有很多方法, 网站先有登录和认证, authenticate(),提供用户认证,验证用户名和密码是否正确,一般需要username ,password两个关键字参数, 认证信息有效,返回有一个User对象.authrenticate()会在User对象上设置一个属性标识,认证了该用户, 创建一个Book表,然后生成数据库 fro

Django之auth模块(用户认证)登陆组件

auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的登录信息是否存在于数据库中. 除此之外,auth还对session做了一些封装,方便我们校验用户是否已登录 auth里的方法 如果想使用auth模块的方法,必须要先导入auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法

Django内置模块auth实现认证功能代码

auth 模块的知识点, 一,用户认证 1,创建超级用户(此步之所以这么做,是用于将用户名密码使用命令写入auth_user表中 (此表不能手工写,因为password是加密后的字串)) python manage.py createsuperuser 输入用户名 xiaohei 输入邮箱.... 输入密码xiaohei1234 去数据库里就能看到auth插件,auth_user表对应的信息了 二,views.py中的核心代码 2.1导入模块 from django.contrib import

Django之auth模块用户认证模块

一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth, 它默认使用 auth_user 表来存储用户数据. 2)auth模块的功能

Django进阶-Auth认证模块

转自:https://www.cnblogs.com/liwenzhou/p/9030211.html Django自带的用户认证系统 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据. auth模块 authenticate(

django 自定义auth中user登陆认证以及自写认证

第一种: 重写自定义auth中user登陆认证模块, 引入MobelBackend from django.contrib.auth.backends import ModelBackend 重写验证模块 class CustomBackend(ModelBackend): def authenticate(self, request, username=None, password=None, **kwargs): try: user = Hbuser.objects.get(username

Django之用户认证auth模块使用

Auth认证模块 执行数据库迁移的那两条命令时,即使我们没有建表,django是不是也会创建好多张表?我们创建之后去看一下里面的一个叫auth_user表,既然是表,那肯定应该有对应的操作改表的方法 auth_user表记录的添加 创建超级用户(不可手动插入,因为密码是加密的) 简单使用auth认证 from django.contrib import auth def login(request): if request.method == 'POST': name = request.POS

Django之auth认证组件

原文链接:https://www.jianshu.com/p/612b3d76a1f5 Django之auth组件 前言:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据. auth中提供的实用方法: - 创建用户 pytho

Django认证系统--Auth模块

Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据. 举个例子: 用session写一个登陆 会比较麻烦 urls.py from django.contrib import admin from dj