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'
]