亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python Flask簡易教程

系統 1595 0

1. Why Flask?

  • 官方文檔詳細,學習成本低,有利于項目其他成員迅速投入開發
  • 框架輕,可擴展性高,且有很多好用的擴展(extension)
  • 該框架仍在積極地維護和開發

2. 將要介紹到的Flask的擴展

  • flask blueprint 用于注冊、管理路由
  • flask_restful 用于支持構建REST APIs
  • flask_migrate 用于管理數據庫版本遷移
  • flask_sqlalchemy orm, 用于映射數據庫對象,提供數據操作方法

3. 項目結構

            
              - project
	- user
		- helpers.py
		- views.py
	- migrations
	- __init__.py
	- blueprint.py
	- bootstrap.py
	- models.py

            
          
路徑 功能
user/ 資源或者模塊,此處為用戶模塊
migrations 數據庫遷移文件
user/views.py 處理對資源的請求(如GET,POST)
user/helpers.py 模塊涉及到的輔助函數
__init__.py 初始化Flask app
blueprint.py 路由
bootstrap.py app的啟動
models.py 數據庫實體的對象

4. 關鍵代碼

初始化Flask app

            
              
                # __init__.py
              
              
                from
              
               flask 
              
                import
              
               Flask

app 
              
                =
              
               Flask
              
                (
              
              __name__
              
                )
              
            
          

路由注冊

使用兩種包

  1. flask blueprint 普通的路由,一個函數對應于一個api請求
            
              
                # user/views.py
              
              
@blueprint
              
                .
              
              route
              
                (
              
              
                '/password'
              
              
                ,
              
               methods
              
                =
              
              
                [
              
              
                'PUT'
              
              
                ]
              
              
                )
              
              
                def
              
              
                update_password
              
              
                (
              
              
                )
              
              
                :
              
              
    form 
              
                =
              
               request
              
                .
              
              get_json
              
                (
              
              
                True
              
              
                ,
              
              
                True
              
              
                )
              
              
    user_id 
              
                =
              
               auth_helper
              
                (
              
              
                )
              
              
    new_pass 
              
                =
              
               form
              
                .
              
              get
              
                (
              
              
                "password"
              
              
                )
              
              
                if
              
              
                not
              
               new_pass
              
                :
              
              
                return
              
               jsonify
              
                (
              
              error
              
                =
              
              
                "密碼不能為空"
              
              
                )
              
              
                ,
              
              
                400
              
              
    new_pass 
              
                =
              
               encrypt_helper
              
                (
              
              new_pass
              
                )
              
              
    User
              
                .
              
              patch
              
                (
              
              user_id
              
                =
              
              user_id
              
                ,
              
               password
              
                =
              
              new_pass
              
                )
              
              
    cookie 
              
                =
              
               request
              
                .
              
              cookies
    session_id 
              
                =
              
               cookie
              
                .
              
              get
              
                (
              
              
                'fat-wallet'
              
              
                )
              
              
    session
              
                .
              
              pop
              
                (
              
              session_id
              
                )
              
              
                return
              
               jsonify
              
                (
              
              data
              
                =
              
              
                "ok"
              
              
                )
              
              
                ,
              
              
                200
              
            
          
  1. flask_restful  單位為資源,支持GET, POST等http方法
            
              
                # user/views.py
              
              
                class
              
              
                UserResource
              
              
                (
              
              Resource
              
                )
              
              
                :
              
              
                def
              
              
                get
              
              
                (
              
              self
              
                )
              
              
                :
              
              
        student_id 
              
                =
              
               request
              
                .
              
              args
              
                .
              
              get
              
                (
              
              
                "student_id"
              
              
                )
              
              
        username 
              
                =
              
               request
              
                .
              
              args
              
                .
              
              get
              
                (
              
              
                "username"
              
              
                )
              
              
        offset 
              
                =
              
               request
              
                .
              
              args
              
                .
              
              get
              
                (
              
              
                "offset"
              
              
                )
              
              
        limit 
              
                =
              
               request
              
                .
              
              args
              
                .
              
              get
              
                (
              
              
                "limit"
              
              
                )
              
              
        users 
              
                =
              
               User
              
                .
              
              get
              
                (
              
              student_id
              
                =
              
              student_id
              
                ,
              
               username
              
                =
              
              username
              
                ,
              
               offset
              
                =
              
              offset
              
                ,
              
               limit
              
                =
              
              limit
              
                )
              
              
        result 
              
                =
              
              
                [
              
              
                {
              
              
                "user_id"
              
              
                :
              
               user
              
                .
              
              
                id
              
              
                ,
              
              
                "student_id"
              
              
                :
              
               user
              
                .
              
              student_id
              
                ,
              
              
                "username"
              
              
                :
              
               user
              
                .
              
              username
              
                ,
              
              
                "major"
              
              
                :
              
               user
              
                .
              
              major
              
                ,
              
              
                "email"
              
              
                :
              
               user
              
                .
              
              email
              
                ,
              
              
                "phone"
              
              
                :
              
               user
              
                .
              
              phone
              
                ,
              
              
                "avatar"
              
              
                :
              
               user
              
                .
              
              avatar
              
                .
              
              decode
              
                (
              
              
                )
              
              
                if
              
               user
              
                .
              
              avatar 
              
                else
              
              
                None
              
              
                }
              
              
                for
              
               user 
              
                in
              
               users
              
                ]
              
              
                return
              
              
                dict
              
              
                (
              
              data
              
                =
              
              result
              
                ,
              
               count
              
                =
              
              
                len
              
              
                (
              
              result
              
                )
              
              
                )
              
              
                ,
              
              
                200
              
            
          

為app注冊以上兩種路由

            
              
                # blueprint.py
              
              
                from
              
               backend
              
                .
              
              user
              
                .
              
              views 
              
                import
              
               blueprint 
              
                as
              
               user_blueprint

              
                from
              
               backend
              
                .
              
              user
              
                .
              
              views 
              
                import
              
               UserResource

              
                def
              
              
                setup
              
              
                (
              
              app
              
                )
              
              
                :
              
              
    api 
              
                =
              
               Api
              
                (
              
              app
              
                )
              
              
    app
              
                .
              
              register_blueprint
              
                (
              
              user_blueprint
              
                ,
              
               url_prefix
              
                =
              
              
                '/users'
              
              
                )
              
              
    api
              
                .
              
              add_resource
              
                (
              
              UserResource
              
                ,
              
              
                '/users/'
              
              
                )
              
            
          

定義映射數據庫的對象,通過對象操作數據

            
              
                # models.py
              
              
app
              
                .
              
              config
              
                [
              
              
                'SQLALCHEMY_DATABASE_URI'
              
              
                ]
              
              
                =
              
              
                'mysql+pymysql://root:admin@mysql/money'
              
              
db 
              
                =
              
               SQLAlchemy
              
                (
              
              app
              
                )
              
              
migrate 
              
                =
              
               Migrate
              
                (
              
              app
              
                ,
              
               db
              
                )
              
              
                class
              
              
                MyMixin
              
              
                (
              
              
                object
              
              
                )
              
              
                :
              
              
    __table_args__ 
              
                =
              
              
                {
              
              
                'mysql_engine'
              
              
                :
              
              
                'InnoDB'
              
              
                ,
              
              
                'mysql_charset'
              
              
                :
              
              
                'utf8mb4'
              
              
                ,
              
              
                }
              
              
                class
              
              
                User
              
              
                (
              
              db
              
                .
              
              Model
              
                ,
              
               MyMixin
              
                )
              
              
                :
              
              
    __tablename__ 
              
                =
              
              
                'users'
              
              
                id
              
              
                =
              
               db
              
                .
              
              Column
              
                (
              
              BIGINT
              
                (
              
              unsigned
              
                =
              
              
                True
              
              
                )
              
              
                ,
              
               primary_key
              
                =
              
              
                True
              
              
                )
              
              
    student_id 
              
                =
              
               db
              
                .
              
              Column
              
                (
              
              db
              
                .
              
              String
              
                (
              
              
                10
              
              
                )
              
              
                ,
              
               unique
              
                =
              
              
                True
              
              
                )
              
              
    username 
              
                =
              
               db
              
                .
              
              Column
              
                (
              
              db
              
                .
              
              String
              
                (
              
              
                20
              
              
                )
              
              
                ,
              
               unique
              
                =
              
              
                True
              
              
                ,
              
               nullable
              
                =
              
              
                False
              
              
                )
              
              
    password 
              
                =
              
               db
              
                .
              
              Column
              
                (
              
              db
              
                .
              
              String
              
                (
              
              
                40
              
              
                )
              
              
                ,
              
               nullable
              
                =
              
              
                False
              
              
                )
              
              
    major 
              
                =
              
               db
              
                .
              
              Column
              
                (
              
              db
              
                .
              
              String
              
                (
              
              
                20
              
              
                )
              
              
                )
              
              
    email 
              
                =
              
               db
              
                .
              
              Column
              
                (
              
              db
              
                .
              
              String
              
                (
              
              
                30
              
              
                )
              
              
                ,
              
               unique
              
                =
              
              
                True
              
              
                )
              
              
    phone 
              
                =
              
               db
              
                .
              
              Column
              
                (
              
              db
              
                .
              
              String
              
                (
              
              
                20
              
              
                )
              
              
                ,
              
               unique
              
                =
              
              
                True
              
              
                )
              
              
    avatar 
              
                =
              
               db
              
                .
              
              Column
              
                (
              
              db
              
                .
              
              LargeBinary
              
                (
              
              
                2
              
              
                **
              
              
                21
              
              
                -
              
              
                1
              
              
                )
              
              
                )
              
              
                # 2M
              
            
          
            
              
                # 通過model操作數據
              
              
	user 
              
                =
              
               User
              
                (
              
              username
              
                =
              
              username
              
                ,
              
               password
              
                =
              
              pass_md5
              
                ,
              
               email
              
                =
              
              email
              
                )
              
              
	db
              
                .
              
              session
              
                .
              
              add
              
                (
              
              user
              
                )
              
              
	db
              
                .
              
              session
              
                .
              
              commit
              
                (
              
              
                )
              
            
          

使用flask_migrate管理數據的遷移

            
              flask db init  
              
                # 初始化(生成migrations文件夾)
              
              
flask db migrate 
              
                -
              
              m 
              
                "msg"
              
              
                # 根據當前的model生成遷移文件, 可添加信息
              
              
flask db upgrade 
              
                id
              
              
                # 根據生成的遷移文件更新數據庫表結構, id為指定的遷移版本,可以為head,表示最新的
              
              
flask db history  
              
                # 查看遷移歷史
              
            
          

運行項目

            
              
                # debug mode
              
              
flask run 
              
                -
              
              
                -
              
              host
              
                =
              
              
                0.0
              
              
                .0
              
              
                .0
              
            
          

Github項目地址


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久国产精品99国产精 | 国产在线精彩视频 | 久久亚洲精品tv | 色婷婷91| 999视频在线| 久久国产精品老人性 | 男女性高爱麻豆 | 欧美在线视频一区二区 | 欧美一级毛片免费网站 | 伊人网久久网 | 另类图片综合 | 天天操天天射天天插 | 福利姬在线精品观看 | 26uuu另类欧美亚洲日本 | 成人网在线免费观看 | 成年网站视频在线观看 | 日本高清免费不卡在线播放 | 全部免费特黄特色大片中国 | 婷婷久 | 日韩欧美毛片免费观看视频 | 成年女人黄小视频 | 久久九九精品一区二区 | 成人网中文字幕色 | 国产成人精品午夜 | 成人影院一区二区三区 | 国产成人啪午夜精品网站男同 | 免费看在线爱爱小视频 | 幸福宝色多多 | 日本高清影院 | 一个色亚洲 | 91宅男 | www.午夜视频 | 五月天在线婷婷 | 99久久精品国产片 | 亚洲成人高清在线观看 | 人成在线免费视频 | 97se在线观看| 久草在线国产视频 | 久久综合久久美利坚合众国 | 九月丁香婷婷亚洲综合色 | 色婷婷综合网 |