1. 程式人生 > >自關聯、中間件

自關聯、中間件

spa 下一個 添加 resp ati lte rfi key eply

M2M自關聯特性:

class UserInfo(models.Model):
    nickname = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    gender_choices = (
        (1,),
        (2,),
    )
    gender = models.IntegerField(choices=gender_choices)
    m 
= models.ManyToManyField(UserInfo) 會額外生成一張表,userinfo_m 裏面有三列id 、from_userinfo_id、to_userinfo_id M2M自關聯特性: obj = models.UserInfo.objects.filter(id=1).first() # from_userinfo_id obj.m => select xx from xx where from_userinfo_id = 1 # to_userinfo_id obj.userinfo_set
=> select xx from xx where to_userinfo_id = 1 定義: # 前面列:男生ID # 後面列:女生ID 查男生 xz = models.UserInfo.objects.filter(id=1).first() u = xz.m.all() for row in u: print(row.nickname) 查女神 xz = models.UserInfo.objects.filter(id=4).first() v = xz.userinfo_set.all() for row in v: print(row.nickname)

FK自關聯:

class Comment(models.Model):
    """
    評論表
    """
    news_id = models.IntegerField()            # 新聞ID
    content = models.CharField(max_length=32)  # 評論內容
    user = models.CharField(max_length=32)     # 評論者
    reply = models.ForeignKey(Comment,null=True,blank=True,related_name=xxxx)
    #blank   Admin中是否允許用戶輸入為空

"""
   新聞ID                         reply_id
1   1        別比比    root         null
2   1        就比比    root         null
3   1        瞎比比    shaowei      null
4   2        寫的正好  root         null
5   1        拉倒吧    由清濱         2
6   1        拉倒吧1    xxxxx         2
7   1        拉倒吧2    xxxxx         5
"""
"""
新聞1
    別比比
    就比比
        - 拉倒吧
            - 拉倒吧2
        - 拉倒吧1
    瞎比比
新聞2:
    寫的正好
"""

中間件

在配置setting中MIDDLEWARE就是中間件
創建一個文件m1.py
from django.utils.deprecation import MiddlewareMixin

from django.shortcuts import HttpResponse
class Middle1(MiddlewareMixin):
    def process_request(self, request):
        print(m1.process_request)        結果直接傳遞給下一個中間件。
        # return HttpResponse(不要再往下傳了)
        如果有返回值,就不再傳遞給下一個中間件了。

    def process_response(self, request, response):
        print(m1.process_response)
        return response   必須要返回,不然下一個中間件不能拿到結果。


在配置setting中MIDDLEWARE添加中間件m1
“m1. Middle1”

自關聯、中間件