1. 程式人生 > >Flask Python Web 框架(四)

Flask Python Web 框架(四)

Flask Web框架中模型的相關與對映

一、關係對映

1、一對多
          語法:
              1、在“多”的實體中
                     增加一個列,引用自“一” 表的主鍵列
                     外來鍵列名 = db.Column(db.Integer,db.ForeignKey('主鍵表,主鍵列'))
              2、在“一”的實體中
                     增加關聯屬性以及反向引用關係
                      ex:
                         關聯屬性
                                 在course物件中,通過一個屬效能夠得到對應的所有的teacher們
                                 關聯屬性,是應該加在Course的實體類中
                          反向引用:
                                 在student物件中,通過一個屬效能夠得到對應的course
                                 反向引用關係屬性,是應該加在Teacher的實體類中

                     增加關聯屬性和反向引用關係:
                               屬性名 = db.relationship('多表實體類名',關係選項)

                               關係選項:

                             選項名                      說明
                             backref                     在關係的另一個模型中新增的反向引用屬性名 

                             lazy                          指定如何載入當前的相關記錄

                                                            select:首次訪問時載入記錄

                                                            immediate:源物件載入後馬上載入相關記錄

                                                            subquery:效果同上,利用子查詢方式載入記錄

                                                            noload:永不載入記錄

                                                            dynamic:預設不載入記錄,但會提供載入記錄的查詢

                           uselist                      如果設定為False,表示不使用列表表示關聯資料,而使                      用標量
                          secondary                    指定多對多關係對映中的關聯表的名字
                         

         2、一對一

               1、什麼是一對一?

                  A表中的一條記錄只能與B表中的一條記錄相關聯

                  B表中 的一條記錄只能與A表中的一條記錄相關聯

              2、在SQLAlchemy中的體現

                    1、在任意一個類中增加

                       外來鍵列名 = db.Column(db.Integer,db.ForeignKey('主鍵表,主鍵列'))

                    2、在另外一個類中增加

                        關聯屬性  和  反向關係屬性

                        屬性 = db.relationship('關聯的實體類',backref = '反向引用屬性名',uselist= False)

      3 、多對多:

           1、什麼是多對多?

                A表中的一條資料可以與B表中任意多條資料相關聯

                B表中的一條資料可以與A表中任意多條資料相關聯

       2、實現

             在資料庫中使用第三張表(關聯表)
             在程式語言中可以不編寫對應的實體類

         建立第三張表

               db.Table(

               'student_course',#在資料庫中表名

               db.Column('id',db.Integer,primary_key=True),

               db.Column('student_id',db.Integer,db.ForeignKey('student.id')),

               db.Column('course_id',db.Integer,db.ForeignKey('course.id')), 

               )

二、cookies/cookie

   1、什麼是cookies?

        cookies是一種資料儲存手段
       將一段文字儲存在客戶端(瀏覽器)的一種手段,並且可以長時間儲存

   2、cookies的使用場合

       1、記住密碼
       2、記住搜尋關鍵詞

  3、在Flask中使用cookies

    1、使用響應物件將資料儲存進cookies(客戶端)

            1、resp = make_response("字串"|render_template())

            2、resp = redirect('地址')
    
            cookies的語法:

            響應物件.set_cookie(key,value,max_age)

                 key:儲存的cookie的名稱

                 value:儲存的cookie的值

                 max_age:儲存的時間,取值為數字,預設以s為的單位

     2、獲取cookie的值

            每次向伺服器傳送請求時,都會把cookie中的資料封裝到request中並帶到伺服器上

            在flask中通過request.cookies獲取所有的cookies的值

     3、刪除cookie的值

            響應物件.delete_cookie('key')

三、session - 會話

    1、什麼是會話?

      session是儲存在伺服器上,為每個瀏覽器所開闢的一段空間

    2、session在Flask中的實現

         1、配置SECRET_KEY

              app.config['SECRET_KEY']="xxxxxxxxx"
              **值隨意寫,越複雜越好

         2、使用session

              from  flask  import  session

             1、向session中儲存資料

                  session['key'] = value

             2、取值

                  value = session['key']

                  value = session.get('key',' ')

            3、從session中刪除資料

                  del  session['key']