自关联和auth模块

一、自关联

1.一对多关联

2.多对多关联

二、auth模块

1.auth的简单使用

2.装饰器

3.通过auth实现注册功能

4.修改密码

5.自定义模型表应用auth功能

三、layui

一、自关联

参考:https://www.cnblogs.com/Kingfan1993/p/9936541.html

1.一对多关联

1.表内自关联是指表内数据相关联的对象和表是相同字段,这样我们就直接用表内关联将外键关联设置成自身表的字段

2.例如,对于微博评论,每条评论都可能有子评论,但每条评论的字段内容应该都是相同的,并且每条评论都只有一个父评论,这就满足了一对多的情形,父评论id为关联字段,可以对应多个子评论

3.外键关联是在子评论中,有关联字段的是子评论,子评论查父评论是正向,父评论查子评论是反向

4.一对多的自关联可以应用在BBS论坛的留言功能中

# models.py中?# 文章表 """id     title         content1       ‘hello‘      ‘nihao....‘2       ‘world‘      ‘shijie....‘"""class Article(models.Model):    title = models.CharField(max_length=32)    content = models.CharField(max_length=500)?# 评论表"""id  article_id  content   reply_id(自关联,作为外键关联自身表的主键id)     uid1   1           ‘cool‘    0  (不是任何评论的回复)                      2   1           ‘hehe‘    03   1           ‘wtf‘     1  (表示的是这条评论是回复id为1的评论)4   1           ‘how‘     05   2           ‘haha‘    06   1           ‘wow‘     1  (也是回复的第一条评论)7   2           ‘Um‘      5  (回复第五条评论)8   1           ‘aha‘     3  (回复第三条评论)"""class Comment(models.Model):    article = models.ForeignKey("Article")    content = models.CharField(max_length=255)    reply = models.ForeignKey("Comment", default=0)

2.多对多关联

1.例如,建立一张相亲对象表,里面有男有女,我们就可以通过自关联来建立多对多的关系

2.通过ManyToManyField将外键关联自身的主键id

# models.py中?class User(models.Model):    name = models.CharField(max_length=32)    gender_list = [        (1, "男"),        (2, "女"),    ]    gender = models.IntegerField(choices=gender_list,default=1)    r = models.ManyToManyField("User")

3.通过python3 manage.py makemigrationspython3 manage.py migrate提交建表模型之后,会生成两个表,一个是主表,另一个是从表

app_user表 和 app_user_r表

4.从表中的的两个字段,一个是 from_主表名_id,一个是 to_主表名_id

5.当我们通过 from_主表名_id 相关联的对象查与 to_主表名_id相关联的对象时,可以直接通过 ‘主表对象.关系表(从表)‘ 查询

# views.py中?# 查询和jojo的女生res = models.User.objects.filter(name=‘jojo‘, gender=1).first()#print(res)  # objectobjs = res.m.all()  for obj in objs:    print(obj.name)‘‘‘对应的SQL语句:1. select * from app01_user_m where from_user_id = 1;  得到的结果就是对应到app_user_r表中的数据时:to_user_id=[3,4] 所对应的对象?2. select * from app01_user where id in (3,4);‘‘‘

6.当我们 通过 to_主表名_id相关联的对象查 from_主表名_id 相关联的对象时,则需要通过 ‘主表对象.关系表_set‘ 进行查询

# views.py中?# 查询和 fanbingbing 约会的男生res = models.User.objects.filter(name=‘fanbingbing‘, gender=2).first()objs = res.user_set.all()for obj in objs:    print(obj.name)‘‘‘对应的SQL语句:1. select * from app01_user_m where to_user_id = 3; 得到的结果就是对应到app_user_r表中的数据时:from_user_id=[1,2] 所对应的对象?2. select * from app01_user where id in (1,2); ‘‘‘

二、auth模块

1.auth的简单使用

auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象,

1.执行数据库迁移的那两条命令时,即使我们没有建表,django是不是也会创建好多张表?我们创建之后去看一下里面的一个叫auth_user表,既然是表,那肯定应该有对应的操作改表的方法

2.auth_user表的记录的添加:创建超级用户,不可以手动插入,因为密码是加密的,手动添加的明文密码没有意义

3.我们可以在pycharm中使用导航栏中的Tools里的run manage.py Task 中输入createsuperuser

# views.py 中?# 就可以使用auth认证了,做一个简单的登陆?from django.contrib import auth?def test(request):?    if request.method == "GET":        return render(request,"test.html")    else:        name = request.POST.get("user")        psw = request.POST.get("psw")?        myuser = auth.authenticate(request,username=name,password=psw)  # 如果auth_user表中有这条记录,则返回一个user对象(一般就是用户名)?        if myuser: ?            auth.login(request,myuser)  # 会产生一个user对象,可以在任何视图函数中调用            """            给当前成功登陆的用户保存登陆状态,之前是通过cookie或者session,现在通过auth;            request.session["name"] = name等价于:auth.login(request,myuser)            """                        return HttpResponse("success")        else:            return redirect("/test/")?# 在其他视图函数中演示def other(request):        print(request.user)    print(request.user.is_authenticated)        return HttpResponse("ok")
# 总结:# 1.只要登陆成功执行了auth.login(request,user)# 之后在其他任意的视图函数中都可以通过request.user获取当前登陆用户对象?# 2.当没有执行auth.login,request.user打印出来的是匿名用户。将session表数据删除即可演示该效果?# 3.如何判断request.user用户是否通过auth.login登陆呢?request.user.is_authenticated,打印:print(request.user.is_authenticated)?# 为何执行auth.login之后,其他视图函数中就可以通过request.user拿到当前登陆对象呢?# django的中间件中有没有一个叫 ‘django.contrib.auth.middleware.AuthenticationMiddleware‘的中间件,它干了件什么事,能不能推导一下?# 在web端取出session去django_session表里面查相应的数据

4.注销

auth.logout(request)# 等价于删除session数据request.session.flush()

2.装饰器

# 装饰器校验是否登陆及跳转?from django.contrib.auth.decorators import login_required?@login_required(login_url=‘/login/‘,redirect_field_name=‘old‘)  # 没登陆会跳转到login页面,并且后面会拼接上你上一次想访问的页面路径/login/?old=/my_view/,可以通过redirect_field_name参数修改next键名(如果不写这个参数,则为127.0.0.1:8090/login/?old=/my_view/,再无啥用了)def my_view(request):  return HttpResponse("ok")

如果我所有的视图函数都需要装饰并跳转到login页面,那么会很繁琐,我们可以在项目下的settings.py文件中进行配置

# settings.py?# 可以在配置文件中指定auth校验登陆不合法统一跳转到某个路径LOGIN_URL = ‘/login/‘  # 既可以全局配置,也可以局部配置

3.通过auth实现注册功能

1.我们除了通过命令行输入,还可以通过auth提供的其他方法,对auth_user表进行数据的添加

# app的views.py文件中?from django.contrib.auth.models import User?def register(request):    if request.method == "GET":        return render(request, "register.html")    else:        user_name = request.POST.get("username")        psw = request.POST.get("psw")                # User.objects.create()  # 不能用这个,因为密码是明文?        User.objects.create_user(username=user_name,password=psw)  # 创建普通用户        # User.objects.create_superuser(username=user_name,password=psw,[email protected])  # 创建超级用户

4.修改密码

def modify(request):    if request.method==‘GET‘:        return render(request, ‘modify.html‘)    else:        oldpsw = request.POST.get(‘oldpsw‘)        newpsw = request.POST.get(‘newpsw‘)?        res = request.user.check_password(oldpsw) # 获取密码        print(res)        if res:            request.user.set_password(newpsw)            request.user.save()            return HttpResponse(‘ok‘)        else:            return render(request, ‘modify.html‘)

5.自定义模型表应用auth功能

1.扩张auth_user表

2.一对一关联(不推荐)

from django.contrib.auth.models import User?class UserDetail(models.Models):    phone_number = models.CharField(max_length=11)    user = models.OnoToOneField(to=User)

3.面向对象的继承

  • 需要在项目下的settings.py文件中进行配置
# settings.py中?"""1.指定我不再使用默认的auth_user表而是使用我自己创建的Userinfo表2.自定义认证系统默认使用的数据表之后,我们就可以像使用默认的auth_user表那样使用我们的UserInfo表了3.库里面也没有auth_user表了,原来auth表的操作方法,现在全部用自定义的表均可实现"""?# AUTH_USER_MODEL = "app名.models里面对应的模型表名"AUTH_USER_MODEL = "app01.User"
  • 就可以在app下的models.py文件中创建我们自己的用户信息表了
# models.py中?from django.contrib.auth.models import User,AbstractUser?# 继承了auth中的user表class UserInfo(AbstractUser):    phone_number = models.CharField(max_length=32)

三、layui

1.经典模块化前端框架

2.参考:https://www.layui.com/

原文地址:https://www.cnblogs.com/zrx19960128/p/11439249.html

时间: 2024-07-31 11:29:14

自关联和auth模块的相关文章

django自关联,auth模块

一.自关联 写蛮好的一篇博客:https://www.cnblogs.com/Kingfan1993/p/9936541.html 1.一对多关联 1.表内自关联是指表内数据相关联的对象和表是相同字段,这样我们就直接用表内关联将外键关联设置成自身表的字段 2.例如,对于微博评论,每条评论都可能有子评论,但每条评论的字段内容应该都是相同的,并且每条评论都只有一个父评论,这就满足了一对多的情形,父评论id为关联字段,可以对应多个子评论 3.外键关联是在子评论中,有关联字段的是子评论,子评论查父评论是

ORM中介模型 + auth模块

ORM中介模型 Django 允许你指定一个中介模型来定义多对多关系. 你可以将其他字段放在中介模型里面.源模型的ManyToManyField 字段将使用through 参数指向中介模型.对于上面的音乐小组的例子,代码如下: 注意:ManyToMany("Student",through="Course_students") ForeignKey("xxx") class student courst id name id name id na

扩展Django内置的auth模块代码示例

一,创建自定义User模型类.继承AbstractUser 方法1 新建一个表,表里面有手机号,邮箱,地址,一对一与User表进行关联 方法2 新定义一个类,继承类AbstractUser ( auth模块的User类也是继承此AbstractUser 类的) 说明:python 语法上,也是可以直接继承User类的 以下代码,我们扩展了两个字段,phone和addr 注意:settings.py中一定要指不使用内置的User表,而是使用新的UserInfo表 AUTH_USER_MODEL='

python3开发进阶-Django框架的自带认证功能auth模块和User对象的基本操作

阅读目录 auth模块 User对象 认证进阶 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要username  password两个关键字参数 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性来标识后端已经认证了该用户,且该信息

Django 自带认证功能auth模块和User对象的基本操作

一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要username,password两个关键字参数. 如果认证信息有效,会返回一个  User  对象.authenticate()会在User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的. user = au

Django之Auth模块

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

auth模块用户认证

一.auth模块什么 auth模块时django自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据 二auth模块常用方法 首先先导入auth模块 from django.contrib import auth

Django的auth模块

首先我们先来复习一下路由别名如何使用,这里仅仅复习一下二级路由的路由别名该如何使用 ·1.在视图函数中使用二级路由别名,需要加上app的名称+":"+ "路由别名" from django.urls import reverse return redirect(reverse("app1:auth_index_view")) 2.在html文件中使用二级路由的别名 <form action="{% url 'app1:auth_l

Django Auth模块

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