日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python Flask簡易教程

系統(tǒng) 1790 0

1. Why Flask?

  • 官方文檔詳細(xì),學(xué)習(xí)成本低,有利于項(xiàng)目其他成員迅速投入開發(fā)
  • 框架輕,可擴(kuò)展性高,且有很多好用的擴(kuò)展(extension)
  • 該框架仍在積極地維護(hù)和開發(fā)

2. 將要介紹到的Flask的擴(kuò)展

  • flask blueprint 用于注冊(cè)、管理路由
  • flask_restful 用于支持構(gòu)建REST APIs
  • flask_migrate 用于管理數(shù)據(jù)庫版本遷移
  • flask_sqlalchemy orm, 用于映射數(shù)據(jù)庫對(duì)象,提供數(shù)據(jù)操作方法

3. 項(xiàng)目結(jié)構(gòu)

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

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

4. 關(guān)鍵代碼

初始化Flask app

            
              
                # __init__.py
              
              
                from
              
               flask 
              
                import
              
               Flask

app 
              
                =
              
               Flask
              
                (
              
              __name__
              
                )
              
            
          

路由注冊(cè)

使用兩種包

  1. flask blueprint 普通的路由,一個(gè)函數(shù)對(duì)應(yīng)于一個(gè)api請(qǐng)求
            
              
                # 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注冊(cè)以上兩種路由

            
              
                # 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/'
              
              
                )
              
            
          

定義映射數(shù)據(jù)庫的對(duì)象,通過對(duì)象操作數(shù)據(jù)

            
              
                # 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操作數(shù)據(jù)
              
              
	user 
              
                =
              
               User
              
                (
              
              username
              
                =
              
              username
              
                ,
              
               password
              
                =
              
              pass_md5
              
                ,
              
               email
              
                =
              
              email
              
                )
              
              
	db
              
                .
              
              session
              
                .
              
              add
              
                (
              
              user
              
                )
              
              
	db
              
                .
              
              session
              
                .
              
              commit
              
                (
              
              
                )
              
            
          

使用flask_migrate管理數(shù)據(jù)的遷移

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

運(yùn)行項(xiàng)目

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

Github項(xiàng)目地址


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 贡嘎县| 乌海市| 龙胜| 宁河县| 加查县| 确山县| 肥乡县| 赞皇县| 淮南市| 兴安县| 汝州市| 中西区| 吉木萨尔县| 什邡市| 冷水江市| 玉树县| 思茅市| 甘德县| 织金县| 湖南省| 景宁| 镇坪县| 德令哈市| 水城县| 新建县| 淮南市| 吴桥县| 合江县| 乐至县| 庆安县| 保康县| 湟中县| 平潭县| 沙河市| 大庆市| 比如县| 延庆县| 亚东县| 建瓯市| 辽阳县| 开封县|