欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python flask項(xiàng)目入門教程

 更新時(shí)間:2023年08月07日 14:41:20   作者:無(wú)敵小田田  
flask 是一門使用 python 編寫(xiě)的后端框架,這篇文章主要介紹了Python flask項(xiàng)目入門教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

一、flask對(duì)于簡(jiǎn)單搭建一個(gè)基于python語(yǔ)言-的web項(xiàng)目非常簡(jiǎn)單

二、項(xiàng)目目錄

示例代碼 git路徑

 三、代碼介紹

1、安裝pip依賴

通過(guò)pip插入數(shù)據(jù)驅(qū)動(dòng)依賴pip install flask-sqlalchemy 和 pip install pymysql

2.配置數(shù)據(jù)源 config.py

DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'root'
PASSWORD = '123456'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'tgcrm'
# mysql 不會(huì)認(rèn)識(shí)utf-8,而需要直接寫(xiě)成utf8
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,
                                                                       DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True
# 加載密鑰
key_access = '&^_^&protect*py_&^_^&'

3、引用orm框架 訪問(wèn)數(shù)據(jù)庫(kù)

/mapper/exts.py

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

4、啟動(dòng)文件 app.py

from flask import Flask
# 引用數(shù)據(jù)庫(kù)啟動(dòng)文件
from mapper.exts import db
# 引用數(shù)據(jù)庫(kù)配置文件
import config
# 引用數(shù)據(jù)庫(kù)
from controller.user_controller import *
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
app.register_blueprint(user, url_prefix="/user")
# 全局?jǐn)r截器校驗(yàn)token
@app.before_request
def before():
    key = str(request.headers.get('TOKEN'))
    if key != format(config.key_access):
        return 'Password error'
    else:
        pass
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8060)

5、數(shù)據(jù)庫(kù)操作

通過(guò)Flask提供orm框架對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作

5.1增加

# 添加 http://127.0.0.1:5000/user/add/2/1
@user.route('/add/<username>/<pwd>')
def add_user(username, pwd):
    print(username, pwd)
    userinfo = User(username=username, pwd=pwd)
    db.session.add(userinfo)
    db.session.commit()
    # # 接受前端發(fā)來(lái)的數(shù)據(jù)
    # data = json.loads(request.form.get('data'))
    #
    # # lesson: "Operation System"
    # # score: 100
    # lesson = data["lesson"]
    # score = data["score"]
    #
    # # 自己在本地組裝成Json格式,用到了flask的jsonify方法
    # info = dict()
    # info['name'] = "pengshuang"
    # info['lesson'] = lesson
    # info['score'] = score
    # return jsonify(info)
    return jsonify("ADD_SUCCESS")

5.2刪除

@user.route('/delete/<int:id>')
def delete_user(id):
    print(id)
    # 第一種
    user1 = User.query.filter().first()
    print(user1.id)
    db.session.delete(user1)
    db.session.commit()
    # 第二種
    user2 = User.query.filter(User.id == 2).delete()
    db.session.commit()
    return jsonify("DELETE_SUCCESS")

5.3修改

@user.route('/update/<int:id>')
def update_user(id):
    user1 = User.query.filter(User.id == id).first()
    user1.username = "我是修改后的"
    db.session.merge(user1)
    db.session.commit()
    return jsonify("UPDATE_SUCCESS")

5.4查詢

@user.route('/list')
def list_users():
    users = User.query.all()
    print(users)
    users_output = []
    for user in users:
        users_output.append(user.to_json())
    return jsonify(users_output)

5.5條件查詢

1.filter_by和filter

兩種寫(xiě)法根據(jù)版本的不同:

filter_by : 用于查詢簡(jiǎn)單的列名,不支持比較運(yùn)算符

filter filter_by 的功能更強(qiáng)大,支持比較運(yùn)算符,支持 or_ 、 in_ 等語(yǔ)法。

data = UserInfo.query.filter(UserInfo.name=='1').all()

data = UserInfo.query.filter_by(name='1').all()

1.  根據(jù)用戶名查詢符合條件的第一條數(shù)據(jù)
User.query.filter_by(username=username).first()
print("查詢1:", user1.to_json())
    
2. 查詢名字結(jié)尾字符為g的所有數(shù)據(jù)[開(kāi)始/包含]
User.query.filter(User.username.endswith('g')).all()
User.query.filter(User.username.contains('g')).all()
?
3. 查詢名字不等于wang的所有數(shù)據(jù)[2種方式]
 from sqlalchemy import not_
注意了?。哼壿嫴樵兊母袷剑哼壿嫹鸰(類屬性其他的一些判斷)
User.query.filter(not_(User.username=='yang')).all()
User.query.filter(User.username!='yang').all()
?
4. 查詢名字和郵箱都以 li 開(kāi)頭的所有數(shù)據(jù)[2種方式]
from sqlalchemy import and_
User.query.filter(and_(User.username.startswith('li'), User.email.startswith('li'))).all()
User.query.filter(User.username.startswith('li'), User.email.startswith('li')).all()
?
5. 查詢password是 `123456` 或者 `email` 以 `itheima.com` 結(jié)尾的所有數(shù)據(jù)
from sqlalchemy import or_
User.query.filter(or_(User.pwd=='123456', User.email.endswith('tiantian.com'))).all()
?
6. 查詢id為 [1, 3, 5, 7, 9] 的用戶列表
User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()
?
7. 查詢name為liu的角色數(shù)據(jù) 關(guān)系引用
# 舉例 暫時(shí)沒(méi)有 
User.query.filter_by(username='liu').first().role.name
?
8.獲取第一條記錄
User.query.first()
————————————————
版權(quán)聲明:本文為CSDN博主「無(wú)敵小田田」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_36602951/article/details/132123744

6、分頁(yè)對(duì)象

  • has_prev/has_next——是否有上一頁(yè)/下一頁(yè)
  • Items——當(dāng)前頁(yè)的數(shù)據(jù)列表
  • prev_num/next_num——上一頁(yè)/下一頁(yè)的頁(yè)碼
  • total——總記錄數(shù)
  • pages——總頁(yè)數(shù)
@user.route('/loadUserPage/<int:page>/<int:per_page>')
def list_user(page, per_page):
    """ 用戶分頁(yè) """
    # 每一頁(yè)的數(shù)據(jù)大小-per_page 頁(yè)碼-page
    # 1. 查詢用戶信息
    user = User.query
    # 2. 準(zhǔn)備分頁(yè)的數(shù)據(jù)
    print(page, per_page)
    user_page_data = user.paginate(page, per_page=per_page)
    users_output = []
    for user in user_page_data.items:
        users_output.append(user.to_json())
    print("當(dāng)前頁(yè)的數(shù)據(jù)列表", users_output)
    print("是否有上一頁(yè)", user_page_data.has_prev)
    print("是否下一頁(yè)", user_page_data.has_next)
    print("上一頁(yè)的頁(yè)碼", user_page_data.prev_num)
    print("下一頁(yè)的頁(yè)碼", user_page_data.next_num)
    print("總記錄數(shù)", user_page_data.total)
    print("總頁(yè)數(shù)", user_page_data.pages)
    return jsonify(users_output)
""" 輸出
當(dāng)前頁(yè)的數(shù)據(jù)列表 [{'pwd': '2', 'id': 2, 'username': '2', 'nick': '2'}]
是否有上一頁(yè) True
是否下一頁(yè) True
上一頁(yè)的頁(yè)碼 1
下一頁(yè)的頁(yè)碼 3
總記錄數(shù) 7
總頁(yè)數(shù) 7
"""

四、多模塊配置 藍(lán)圖blueprint

在app項(xiàng)目中引用,可以在app中聲明多個(gè)路徑 /user、/admin 、/customer等等

from controller.user_controller import user
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
app.register_blueprint(user, url_prefix="/user")

在子應(yīng)用中聲明 controller/user_controller

from flask import Blueprint, jsonify, request, json
user = Blueprint('user', __name__)
# 查詢?nèi)?http://127.0.0.1:5000/user/list
@user.route('/list')
def list_users():
    users = User.query.all()
    print(users)
    users_output = []
    for user in users:
        users_output.append(user.to_json())
    return jsonify(users_output)

五、統(tǒng)一過(guò)濾器

在app.py文件加入前置過(guò)濾器

# 引用配置文件
import config
# 全局?jǐn)r截器校驗(yàn)token
@app.before_request
def before():
    key = str(request.headers.get('TOKEN'))
    if key != format(config.key_access):
        return 'Password error'
    else:
        pass

配置文件包括

# 加載密鑰
key_access = '&^_^&protect*py_&^_^&'

此時(shí)通過(guò)postman訪問(wèn)接口,會(huì)對(duì)header進(jìn)行請(qǐng)求頭校驗(yàn),不滿足請(qǐng)求直接被打回

 直接當(dāng)攜帶了TOKEN=xxxx才可以正常訪問(wèn)該接口

到此這篇關(guān)于Python flask項(xiàng)目入門的文章就介紹到這了,更多相關(guān)Python flask入門內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中__new__和__init__的區(qū)別與聯(lián)系

    Python中__new__和__init__的區(qū)別與聯(lián)系

    這篇文章主要介紹了Python中__new__和__init__的區(qū)別與聯(lián)系,需要的朋友可以參考下
    2021-05-05
  • Python實(shí)現(xiàn)對(duì)文件類型的獲取方法

    Python實(shí)現(xiàn)對(duì)文件類型的獲取方法

    在工作中時(shí)常需要對(duì)文件進(jìn)行各種處理,如上傳下載,壓縮解壓等,需要獲取文件的類型,所以本文給大家介紹了使用Python實(shí)現(xiàn)對(duì)文件類型的獲取方法,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Python在groupby分組后提取指定位置記錄方法

    Python在groupby分組后提取指定位置記錄方法

    下面小編就為大家分享一篇Python在groupby分組后提取指定位置記錄方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python邊遍歷邊刪除列表元素的幾種方法

    Python邊遍歷邊刪除列表元素的幾種方法

    在 Python 中,邊遍歷邊刪除列表元素通常是一個(gè)不推薦的操作,因?yàn)樗鼤?huì)改變列表的大小,可能會(huì)導(dǎo)致一些意料之外的行為,例如,元素被刪除后,列表的索引會(huì)發(fā)生變化,可能導(dǎo)致漏掉某些元素或者遍歷到錯(cuò)誤的位置,所以本文介紹了Python邊遍歷邊刪除列表元素的幾種方法
    2024-12-12
  • Python實(shí)現(xiàn)圖像添加水印的方法

    Python實(shí)現(xiàn)圖像添加水印的方法

    在日常圖像處理中,為圖片添加水印是一項(xiàng)常見(jiàn)任務(wù),本文主要介紹了Python實(shí)現(xiàn)圖像添加水印的方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • keras讀取訓(xùn)練好的模型參數(shù)并把參數(shù)賦值給其它模型詳解

    keras讀取訓(xùn)練好的模型參數(shù)并把參數(shù)賦值給其它模型詳解

    這篇文章主要介紹了keras讀取訓(xùn)練好的模型參數(shù)并把參數(shù)賦值給其它模型詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python enumerate函數(shù)功能與用法示例

    Python enumerate函數(shù)功能與用法示例

    這篇文章主要介紹了Python enumerate函數(shù)功能與用法,結(jié)合實(shí)例形式分析了enumerate函數(shù)針對(duì)列表、字符串遍歷操作相關(guān)使用技巧,需要的朋友可以參考下
    2019-03-03
  • K-近鄰算法的python實(shí)現(xiàn)代碼分享

    K-近鄰算法的python實(shí)現(xiàn)代碼分享

    這篇文章主要介紹了K-近鄰算法的python實(shí)現(xiàn)代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • django虛擬環(huán)境(virtualenv)的創(chuàng)建

    django虛擬環(huán)境(virtualenv)的創(chuàng)建

    在使用django開(kāi)發(fā)項(xiàng)目的時(shí)候,一個(gè)環(huán)境只能對(duì)應(yīng)一個(gè)項(xiàng)目,若不安裝虛擬環(huán)境、都裝在系統(tǒng)里面,每次項(xiàng)目加載都需要加載所有的安裝包,本文就介紹django虛擬環(huán)境的安裝,感興趣的可以了解一下
    2021-08-08
  • Python數(shù)據(jù)結(jié)構(gòu)之遞歸可視化詳解

    Python數(shù)據(jù)結(jié)構(gòu)之遞歸可視化詳解

    遞歸函數(shù)是直接調(diào)用自己或通過(guò)一系列語(yǔ)句間接調(diào)用自己的函數(shù)。遞歸在程序設(shè)計(jì)有著舉足輕重的作用,在很多情況下,借助遞歸可以優(yōu)雅的解決問(wèn)題。本文主要介紹了如何利用可視化方式來(lái)了解遞歸函數(shù)的執(zhí)行步驟,需要的可以參考一下
    2022-04-04

最新評(píng)論