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

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條評論
主站蜘蛛池模板: 色爱区综合激情五月综合色 | 天天操天天玩 | 91亚洲国产成人久久精品网址 | 国产精品怡红院永久免费 | 成人一级片在线观看 | 欧美seav在线 | 国产综合成人久久大片91 | 欧美成人免费观看久久 | 99久久综合狠狠综合久久 | 国产福利精品视频 | 国内第一永久免费福利视频 | 一级黄片一级毛片 | 天天爱天天操 | 国产天天在线 | 欧美不卡精品中文字幕日韩 | 国产一区二区三区不卡在线观看 | 亚洲精品中文字幕一区在线 | 99中文在线 | 99日韩| 久久精品中文字幕有码日本 | 日日夜夜天天人人 | 伊人五月在线 | 91精品国产人成网站 | 久久这里只有精品视频99 | 日韩中文字幕精品视频在线 | 日本精品久久久中文字幕 | 99这里只有精品66视频 | 天天干免费视频 | 悠悠久久| 久久98 | 免费一看一级欧美 | 免费视频性 | 玖玖影院在线观看 | 亚洲国产一区二区三区在线观看 | 在线亚洲激情 | 成人短视频在线观看免费 | 国产精品入口麻豆高清在线 | 成人a在线 | 青青青青青国产免费观看 | 亚洲精品图 | 视频在线观看一区 |