模型类多表操作和中间件

 

class User2(models.Model):
    username = models.CharField(max_length=16)

class News(models.Model):
    topic = models.CharField(max_length=100)
    #to指向一的一方,一对多 ;on_delete外键约束,级联操作;
    #帖子的发送者,一对多的关系
    # 一个User2对象能对应多个News对象,一个News对象只能对应一个User2对象
    sender = models.ForeignKey(to=User2,on_delete=models.CASCADE,related_name='sender_set')
    #帖子的收藏者,多对多的关系,会生成一个中间表用来表示多对多的关系
    #一对多的关系一个User2对象能对应多个News对象,一个News对象也能对应多个User2对象
    collectors = models.ManyToManyField(to=User2,related_name='collectors_set')

class Area(models.Model):
    name = models.CharField(max_length=10)
    pArea = models.ForeignKey(to='self',null=True,on_delete=models.CASCADE)
'''
news.sender 得到帖子的发送者,返回的是User.Object对象
user.sender_set.all() 返回的是QuerySet [<News: News object (1)>,...]
user.sender_set.add(news)       给用户添加一个new对象,相当于添加一个帖子
user.sender_set.remove(news)    给用户删除一个new对象,相当于删除一个帖子

news.collectors.all()    返回的是QuerySet [<User2: User2 object (1)>,...]对象,这个帖子的所有收藏者
user.collectors_set.all() 和上面的正好是相反的,这个是通过该用户获取所收藏的所有帖子,也是QuerySet [<News: News object (1)>,...]
user.collectors_set.add(news) 给用户 添加一个所收藏的帖子
user.collectors_set.remove(news) 给用户 删除一个所收藏的帖子

area.pArea → Area Object   得到的是他的 上级 返回的是 Area Object
area.area_set.all() → QuerySet 没有指明 related_name 属性的值,使用area_set(类名小写然后加上set 来找到多的一方这里是找到所有的下级)

'''

 

1. 定义中间件
from django.utils.deprecation import MiddlewareMixin

class MyMiddleware(MiddlewareMixin):
    def __init__(self,get_response=None):
        super().__init__(get_response)
        # 初始化中间件
        print('init_mymiddleware')

    def process_request(self,request):
        # 没有return或者return None 继续调用其他视图
        # return response 则不会调用其他视图
        print('process_request')


    def process_response(self,request,response):
        # 必须return response
        print('process_response')
        return response



2. 配置中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'middleware.MyMiddleware'
]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值