ORM中介模型 + auth模块

ORM中介模型

Django 允许你指定一个中介模型来定义多对多关系。

你可以将其他字段放在中介模型里面。源模型的ManyToManyField 字段将使用through 参数指向中介模型。对于上面的音乐小组的例子,代码如下:

注意:ManyToMany("Student",through="Course_students")

   ForeignKey("xxx")

class            student            courst

id name          id  name           id  name
1    s1          1    lcg            1   Go
                 2    ming           2   Python
s_c
id student_id  course_id
1       1         1
2       2         1
3       2         2
处理类似的多对多关系时,使用标准的ManyToManyField可以描述关系。
但是,有时你可能需要关联数据(score)到两个模型之间的关系上。
s_c
id student_id  course_id  score
1       1         1        80
2       2         1        90
3       2         2        100
 

中介模型

class Student(models.Model):
    name=...
class Course(models.Model):
    name=...
    students=models.ManyToMany("Student",through="Course_students")
    # through告诉ORM我自己去创建第三张表,不必给我自动创建,students这个字段我也用。
class Course_students(models.Model):
    student_id=mdoels.ForeignKey("Student")
    course_id=mdoels.ForeignKey("Course")
    score=models.IntegerFiled()

ORM中介模型

auth模块

使用auth模块需要在settings.py中进行配置  AUTH_USER_MODEL="app名字.表名"
创建超级用户的命令: python manage.py  createsuperuser
from django.contrib import authfrom django.contrib.auth import authenticate, login

1、authenticate()

提供了用户认证,即验证用户名以及密码是否正确,一般需要username  password两个关键字参数

如果认证信息有效,会返回一个  User  对象。authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的!!

user = authenticate(username=‘someone‘,password=‘somepassword‘)

2、login(HttpResponse,user)

该函数接受一个HttpRequest对象,以及一个认证了的User对象

此函数使用django的session框架给某个已认证的用户附加上session id等信息。

from django.contrib.auth import authenticate, login

def my_view(request):
  username = request.POST[‘username‘]
  password = request.POST[‘password‘]
  user = authenticate(username=username, password=password)
  if user is not None:
    login(request, user)
    # Redirect to a success page.
    ...
  else:
    # Return an ‘invalid login‘ error message.
    ...

auth

3、logout()  注销用户

from django.contrib.auth import logout

def logout_view(request):
  logout(request)
  # Redirect to a success page.

4、

要求:

1  用户登陆后才能访问某些页面,

2  如果用户没有登录就访问该页面的话直接跳到登录页面

3  用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

方法1:

def my_view(request):
  if not request.user.is_authenticated():
    return redirect(‘%s?next=%s‘ % (settings.LOGIN_URL, request.path))

方法2:

django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
  ...

若用户没有登录,则会跳转到django默认的 登录URL ‘/accounts/login/ ‘ (这个值可以在settings文件中通过LOGIN_URL进行修改)。并传递  当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

原文地址:https://www.cnblogs.com/nick477931661/p/8810291.html

时间: 2024-07-29 23:00:19

ORM中介模型 + auth模块的相关文章

Django框架 之 ORM中介模型

中介模型 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField  就可以了.但是,有时你可能需要关联数据到两个模型之间的关系上. 例如,有这样一个应用,它记录音乐家所属的音乐小组.我们可以用一个ManyToManyField 表示小组和成员之间的多对多关系.但是,有时你可能想知道更多成员关系的细节,比如成员是何时加入小组的. 对于这些情况,Django 允许你指定一个中介模型来定义多对多关系. 你可以将其他字段放在中介模型里面.源模型的M

Orm之中介模型

什么是中介模型 中介模型针对的是ManyToMany(多对多)的时候第三张表的问题, 中介模型其实指的就是我们不通过Django创建第三张表,如果自己不创建第三张表,而是由django给我们创建,那就不存在中介模型 中介模型示例 普通的ManyToMany示例 class Book(models.Model): title = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author') class A

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

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

扩展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 模块

Django 内置一个 auth 模块,帮助用户实现注册.登录.注销以及修改密码等功能,帮助开发者省去了很多功夫. auth 模块 在创建模型时,Django内部会生成一个名为 auth_user 的数据表,用于存储认证的用户信息. auth 模块提供了一系列的方法,使用之前需要导入: from django.contrib import auth authenticate() 方法 提供用户认证功能,验证用户名和密码是否正确等.如验证成功,则返回一个 User 对象. from django.

django自关联,auth模块

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

自关联和auth模块

一.自关联 1.一对多关联 2.多对多关联 二.auth模块 1.auth的简单使用 2.装饰器 3.通过auth实现注册功能 4.修改密码 5.自定义模型表应用auth功能 三.layui 一.自关联 参考:https://www.cnblogs.com/Kingfan1993/p/9936541.html 1.一对多关联 1.表内自关联是指表内数据相关联的对象和表是相同字段,这样我们就直接用表内关联将外键关联设置成自身表的字段 2.例如,对于微博评论,每条评论都可能有子评论,但每条评论的字段

Django框架(十一)——Auth模块

Auth模块 一.什么是auth模块 Auth模块是Django自带的用户认证模块 Auth模块是Django自带的用户认证模块,可以实现包括用户注册.用户登录.用户认证.注销.修改密码等功能.默认使用 auth_user 表来存储用户数据. 二.Auth模块使用 1.创建超级用户  (createsuperuser) 创建超级用户就是在auth_user表中插入数据,密码是加密的. 在  Run manage.py Task  创建 createsuperuser 2.查询用户(authent