Python flask項目入門教程
一、flask對于簡單搭建一個基于python語言-的web項目非常簡單
二、項目目錄
示例代碼 git路徑
三、代碼介紹
1、安裝pip依賴
通過pip插入數(shù)據(jù)驅(qū)動依賴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 不會認識utf-8,而需要直接寫成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框架 訪問數(shù)據(jù)庫
/mapper/exts.py
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
4、啟動文件 app.py
from flask import Flask # 引用數(shù)據(jù)庫啟動文件 from mapper.exts import db # 引用數(shù)據(jù)庫配置文件 import config # 引用數(shù)據(jù)庫 from controller.user_controller import * app = Flask(__name__) app.config.from_object(config) db.init_app(app) app.register_blueprint(user, url_prefix="/user") # 全局攔截器校驗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ù)庫操作
通過Flask提供orm框架對數(shù)據(jù)庫進行操作
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ā)來的數(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
兩種寫法根據(jù)版本的不同:
filter_by
: 用于查詢簡單的列名,不支持比較運算符
filter
比filter_by
的功能更強大,支持比較運算符,支持or_
、in_
等語法。
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. 查詢名字結尾字符為g的所有數(shù)據(jù)[開始/包含]
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 開頭的所有數(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` 結尾的所有數(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ù) 關系引用
# 舉例 暫時沒有
User.query.filter_by(username='liu').first().role.name
?
8.獲取第一條記錄
User.query.first()
————————————————
版權聲明:本文為CSDN博主「無敵小田田」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_36602951/article/details/132123744
6、分頁對象
- has_prev/has_next——是否有上一頁/下一頁
- Items——當前頁的數(shù)據(jù)列表
- prev_num/next_num——上一頁/下一頁的頁碼
- total——總記錄數(shù)
- pages——總頁數(shù)
@user.route('/loadUserPage/<int:page>/<int:per_page>') def list_user(page, per_page): """ 用戶分頁 """ # 每一頁的數(shù)據(jù)大小-per_page 頁碼-page # 1. 查詢用戶信息 user = User.query # 2. 準備分頁的數(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("當前頁的數(shù)據(jù)列表", users_output) print("是否有上一頁", user_page_data.has_prev) print("是否下一頁", user_page_data.has_next) print("上一頁的頁碼", user_page_data.prev_num) print("下一頁的頁碼", user_page_data.next_num) print("總記錄數(shù)", user_page_data.total) print("總頁數(shù)", user_page_data.pages) return jsonify(users_output) """ 輸出 當前頁的數(shù)據(jù)列表 [{'pwd': '2', 'id': 2, 'username': '2', 'nick': '2'}] 是否有上一頁 True 是否下一頁 True 上一頁的頁碼 1 下一頁的頁碼 3 總記錄數(shù) 7 總頁數(shù) 7 """
四、多模塊配置 藍圖blueprint
在app項目中引用,可以在app中聲明多個路徑 /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")
在子應用中聲明 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)一過濾器
在app.py文件加入前置過濾器
# 引用配置文件 import config # 全局攔截器校驗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_&^_^&'
此時通過postman訪問接口,會對header進行請求頭校驗,不滿足請求直接被打回
直接當攜帶了TOKEN=xxxx才可以正常訪問該接口
到此這篇關于Python flask項目入門的文章就介紹到這了,更多相關Python flask入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中__new__和__init__的區(qū)別與聯(lián)系
這篇文章主要介紹了Python中__new__和__init__的區(qū)別與聯(lián)系,需要的朋友可以參考下2021-05-05keras讀取訓練好的模型參數(shù)并把參數(shù)賦值給其它模型詳解
這篇文章主要介紹了keras讀取訓練好的模型參數(shù)并把參數(shù)賦值給其它模型詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python enumerate函數(shù)功能與用法示例
這篇文章主要介紹了Python enumerate函數(shù)功能與用法,結合實例形式分析了enumerate函數(shù)針對列表、字符串遍歷操作相關使用技巧,需要的朋友可以參考下2019-03-03django虛擬環(huán)境(virtualenv)的創(chuàng)建
在使用django開發(fā)項目的時候,一個環(huán)境只能對應一個項目,若不安裝虛擬環(huán)境、都裝在系統(tǒng)里面,每次項目加載都需要加載所有的安裝包,本文就介紹django虛擬環(huán)境的安裝,感興趣的可以了解一下2021-08-08