首页 > 其他分享 >Auth模板

Auth模板

时间:2024-01-25 19:26:10浏览次数:22  
标签:request auth django Auth import login 模板 user

Auth模板

  1. 什么是Auth模块,有什么用?
django的auth的模块的使用: auth 是集合注册,登录,注销,session 多个功能集合在一起的模块
  1. 使用Auth组件的默认auth_user表常用操作
from django.contrib.auth.models import User
# 1、创建普通用户
User.objects.create_user(username='Owen', password='123')

# 2、创建超级用户
User.objects.create_superuser(username='root', password='root', email='[email protected]')

# 3、获取第一个用户
user = User.objects.first()

# 4、修改密码
user.set_password('000')
user.save()

# 5、校验密码
res = user.check_password('000')

Auth组件默认auth_user表常用操作
  1. auth 组件的常用功能
# 1、校验用户账号及密码,校验成功返回user对象
from django.contrib.auth import authenticate
user = authenticate(username=usr, password=pwd)

# 2、注册用户到request对象中,注册成功可以request.user访问当前登录用户(会形成session记录)
from django.contrib.auth import login
login(request, user)  # 注册authenticate成功(当前登录)的用户

# 3、注销当前注册的user (用户注销)
from django.contrib.auth import logout
logout(request)

Auth组件常用功能
例题: 检验第一个用户的密码
user = User.objects.first()
res = user.check_password('000')
# 检验的结果是布尔值, True 或者是False

2. django 的检验用户的账号与密码是否正确的模块:
from django.contrib.auth import authenticate
user = authenticate(username=usr, password=pwd)
#校验用户账号及密码,校验成功返回user对象

3. django 的检验用户成功后的登录模块, 登录之后直接添加session的功能
from django.contrib.auth import login
login(request, user)  # 注册authenticate成功(当前登录)的用户
#注册用户到request对象中,注册成功可以request.user访问当前登录用户(会形成session记录)

4. django 模块中的注销用户,用户注销 用户可以直接退出了,session会消失
from django.contrib.auth import logout
logout(request)

5. django 模块的检验用户是否登录的方法

# 视图函数中使用
if request.user.is_authenticated(): pass
# 模板语言中使用
{% if request.user.is_authenticated %}
{% else %}
{% endif %}
  1. auth模块之检验用户是否登录,可以做装饰器用
from django.contrib.auth.decorators import login_required
@login_required(login_url='/user_login/')
def user_home(request):
    return render(request, 'user.html', locals())
# 注意他返回的是/user_login/?next=/user_order/ 所以前面拿到的是'next'的key  就可以拿到返回值/user_order/

\5. auth模块之给user_auth表添加额外的字段

6. 当发现auth模块的User表的信息太少,想自己添加信息的话:

# 在models.py 内
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    # 增加自定义字段
    info = models.TextField(null=True)
    phone = models.TextField(null=True)


# settings.py配置
AUTH_USER_MODEL = 'app.User'

# 下次在调用User表的话 就使用 from app.models import User

\6. 通过auth组件实现前端实现用户登录跳出不同的页面的功能

7. 如何在前端显示 这个是谁的主页信息
<body>
<h1>{{ request.user.username }}的个人订单</h1>
</body>
# request.user 是拿到当前登录的对象,
# .username 是拿到当前对象的名字来显示 谁谁谁的的个人订单

8. 如何实现用户登录了就显示 个人主页与注销  没登录就显示 登录与注册
# 在前端写:
<p>
{% if request.user.is_authenticated %}      #判断用户是否登录成功
    <a href="/user_home/">{{ request.user.username }}</a>   #如果登录成功显示 用户的名字
    |
    <a href="/user_logout/">注销</a>      # 和注销
{% else %}
    <a href="/user_login/">登录</a>       #如果用户没登录, 显示登录
    |
    <a href="/user_register/">注册</a>    # 和注册
{% endif %}
</p>

 如何在前端显示 这个是谁的主页信息

简单的使用Auth组件完成用户的注册登录与判断验证+session的功能简单实现

from django.shortcuts import render, HttpResponse, redirect
# from django.contrib.auth.models import User
from app.models import User
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.db.utils import IntegrityError


def index(request):
    return render(request, 'index.html', locals())


def user_login(request):
    if request.method == "GET":
        return render(request, 'login.html')
    if request.method == "POST":
        # 在请求url中通过next取出回跳的页面路径
        back_url = request.GET.get('next', '/')
        usr = request.POST.get('usr', None)
        pwd = request.POST.get('pwd', None)
        # 用前台传入的账户密码作登录校验
        user = authenticate(username=usr, password=pwd)  # type: User
        if user:
            # 在session中记录登录状态 => login(request, user)来记录登录状态
            # request.session['usr'] = user.username
            # request.session['is_login'] = True
            login(request, user)

        return redirect(back_url)


def user_logout(request):
    logout(request)
    return redirect('/')


def user_register(request):
    if request.method == "GET":
        return render(request, 'register.html')
    if request.method == "POST":
        usr = request.POST.get('usr', None)
        pwd = request.POST.get('pwd', None)
        try:
            User.objects.create_user(username=usr, password=pwd)
        except IntegrityError as e:
            print('注册失败:%s' % e)
        return redirect('/')


# 装饰器的页面返回key是next:/user_login/?next=/user_order/
@login_required(login_url='/user_login/')
def user_order(request):
    return render(request, 'order.html', locals())


@login_required(login_url='/user_login/')
def user_home(request):
    return render(request, 'user.html', locals())

课件案例简单实现

标签:request,auth,django,Auth,import,login,模板,user
From: https://www.cnblogs.com/mengdie1978/p/17880087.html

相关文章

  • P3374 【模板】树状数组 1(线段树)
    【模板】树状数组1题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上x求出某区间每一个数的和输入格式第一行包含两个正整数n,m,分别表示该数列数字的个数和操作的总个数。第二行包含n个用空格分隔的整数,其中第i个数字表示数列第i项的初始值......
  • 根据word模板动态导出word文档
    根据word模板动态导出word文档前置条件:新建一个springboot项目1.引jar包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><group......
  • 【模板】并查集
    并查集是解决两元素是否属于同一集合,将一个集合合并另一集合的数据结构。具体来说,我们使用数字代替集合,比如集合1,集合2.使用数组f[i]维护元素i属于的集合,比如f[2]=4表示元素2属于集合4。具体我们有以下实现功能的代码1初始化表示集合的数组。cin>>n>>m;for(int......
  • 代码模板
    代码模板数论快速幂intqmi(inta,intb,intp){ intres=1; while(b){ if(b&1)res=res*a%p; a=a*a%p; b>>=1; } returnres;}线性筛法(素数+欧拉函数)intst[N1],pri[N1],cnt,phi[N1];intgetp(intn){ phi[1]=1; for(inti=......
  • P3389 【模板】高斯消元法
    #include<bits/stdc++.h>usingnamespacestd;doublemax(doublea,doubleb){ if(a>=b)returna; if(a<b)returnb;}intn;doublea[1010][1010];doublea1[1010][1010];intmain(){ scanf("%d",&n); for(inti=1;i<=n;i++) { ......
  • P3374 【模板】树状数组 1
    part1#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;structnode1{intl,r,value;};node1node[2000020];inta[500010];voidmt(intp,intl,intr){intmid=(l+r)>>1;node[p].l=l;node[p].r=r;if(l==r)......
  • P3368 【模板】树状数组 2
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintMax=500005;inta[Max];intn,m;intlowbit(intx){ returnx&-x;}voidadd(intx,inty){ while(x<=n){ a[x]+=y; x+=lowbit(x); }}intsum(intx)......
  • 【模板】多项式半家桶 version 2
    #include<bits/stdc++.h>usingnamespacestd;#ifdefLOCAL#definedebug(...)fprintf(stderr,##__VA_ARGS__)#else#defineendl"\n"#definedebug(...)void(0)#endiftypedeflonglongLL;template<unsignedumod>structmodint{......
  • emlog蓝叶模板伪原创插件
    一个模板如果使用的人多,搜索引擎会识别网站的相似度,会认为这是同一个站作弊行为,那就会降低你网站的权重,可能最终你的幸苦更新会成就别人,做了别人的嫁衣,所以有条件的最好是做个全新代码的模版,如果不想重新做新模板,那么emlog蓝叶模板伪原创插件可以实现你的要求,使用emlog蓝叶模板伪......
  • 算法模板 v1.3.2.20240124
    算法模板v1.1.1.20240115:之前的历史版本已经不可寻,创建了第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”与“编译”-“手动开O优化”;将“编译”-“CF模板”中的第20行代码cin>>T;注释;删除“读写”及其目录下的内容;删除“图论”-“欧拉图”-“混合图”;删除“图论”-......