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

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條評論
主站蜘蛛池模板: 久久综合中文字幕一区二区 | 手机看片高清日韩精品 | 鲁丝丝国产一区二区 | 久久久这里只有免费精品2018 | 亚洲一区二区三区在线播放 | 国产免费一级精品视频 | 九九热精品视频在线观看 | 97影院官网| 久久黄视频 | 九九99久久 | 国内精品久久久久久久久蜜桃 | 国产精品九九久久精品女同 | 黄色网址视频在线播放 | 欧美成人免费在线视频 | 亚洲精品香蕉一区二区在线观看 | 在线观看h片 | 亚洲美女在线播放 | 国产性色视频在线高清 | 曰本毛片va看到爽不卡 | 99久久精品国产片 | 亚洲欧美专区精品久久 | 国产首页精品 | 亚洲精品国产美女在线观看 | 五月婷婷综合激情 | 久久大香伊蕉在人线国产昨爱 | 亚州毛色毛片免费观看 | 97人人澡人人爽人人爱 | 色精品一区二区三区 | 免费看欧美日韩一区二区三区 | se94se在线看片secom | 狠狠插天天干 | 日本一级α一片免费视频 | 在线日韩亚洲 | 欧美成人免费毛片 | 伊人天天躁夜夜躁狠狠 | 天天草夜夜操 | 大学生一级毛片 | 亚洲一区在线日韩在线深爱 | 国内精品视频在线观看 | 午夜精品久久久久久久四虎 | 亚洲综合色婷婷在线观看 |