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

猜你喜欢

转载自blog.csdn.net/extremelove520/article/details/84335081