python学籍管理系统 flask_taskday05-Python之flask学习 web开发最基本的需要(特别详细且适用)...
1.首先一個Flask的Web項目的創(chuàng)建需求一(文章概述):一:必須實現(xiàn)命令工具管理App,用于在命令行輸入命令對項目進行管理,對后期多多益善
二:必須實現(xiàn)“藍圖”管理,用于將app啟動函數(shù)與路由分開管理,使得項目啟動文件、API路由管理更加更加清晰
三:必須實現(xiàn)類與數(shù)據(jù)庫之間的映射,方便的實現(xiàn)App中的類與數(shù)據(jù)庫中的表一一映射,更加簡易的實現(xiàn)對數(shù)據(jù)庫的增、刪、改、查操作
2.現(xiàn)在來創(chuàng)建一個Flask項目項目默認創(chuàng)建項目默認目錄結構
3.實現(xiàn)命令工具管理App,首先需要自定義一個創(chuàng)建App的方法,然后安裝flask-script插件,使用插件的Manager()構建對象,具體如下:為了方便直接先安裝插件flask-script,先后無影響:pip install flask-script安裝命令管理工具的插件
2.第一次修改默認目錄。一:刪除默認app啟動部分代碼。二:創(chuàng)建apps包,在init中創(chuàng)建項目創(chuàng)建的方法。三:導入自己需要的開發(fā)配置文件。四:將app交給命令工具管理插件
一.第一步
#配置文件
class Config:
# 后端代碼變項目自動重新啟動
ENV='development'
DEBUG=True
#mysql+pymysql://user:password@hostid:port/databasename,數(shù)據(jù)庫配置
SQLALCHEMY_DATABASE_URI='mysql+pymysql://yh:123@localhost:3306/flaskday06_1'
SQLALCHEMY_TRACK_MODIFICATIONS=False
#其它。。。
二,三:第二步
from flask import Flask
import settings
def create_app():
#使用flask創(chuàng)建app對象,并且修改默認的靜態(tài)文件與模板尋找的路徑
app=Flask(__name__,template_folder='../templates',static_folder='../static')
#導入自己需要的配置文件
app.config.from_object(settings.Config)
#為App掛載藍圖
#為App掛載與數(shù)據(jù)庫操作的插件
#打印路由
print(app.url_map)
return app
四:
from flask_script import Manager
from apps import create_app
app=create_app() #調(diào)用創(chuàng)建App的自定義方法
manager=Manager(app=app) #將app項目交給命令管理工具,方便管理數(shù)據(jù)庫映射命令(其中之一)
if __name__ == '__main__':
#app.run()
manager.run()
四:命令管理工具基本使用
使用命令在終端:python app.py runserver -----項目啟動
runserver -h 0.0.0.0 -p 5001 ----指定IP與PORT使用命令管理工具啟動項目,之后使用會更加方便
自定義添加命令:
@manager.command #命令裝飾器
def hello():
print('hello 方法')
命令使用:python app.py hello
五:使用"藍圖"管理API路由一:創(chuàng)建"藍圖",Blueprint()管理對應類的API構建藍圖,‘user’可以方便用于url_for()相結合
#用于存放視圖函數(shù)
from flask import Blueprint
user_bp=Blueprint('user',__name__)
'''
使用藍圖管理路由,更加方便與代碼清晰
'''
@user_bp.route('/')
def index():
return '首頁'
@user_bp.route('/register',methods=['GET','POST'])
def register():
return '用戶注冊'
@user_bp.route('/show')
def show():
return '用戶信息展示'
二:在創(chuàng)建app的方法(create_app())中掛載藍圖,使用app.register_blueprint()方法掛載藍圖
from flask import Flask
import settings
from apps.users.view import user_bp
def create_app():
#使用flask創(chuàng)建app對象,并且修改默認的靜態(tài)文件與模板尋找的路徑
app=Flask(__name__,template_folder='../templates',static_folder='../static')
#導入自己需要的配置文件
app.config.from_object(settings.Config)
#為App掛載藍圖
app.register_blueprint(user_bp)
#為App掛載與數(shù)據(jù)庫操作的插件
#打印路由
print(app.url_map)
return app
四:測試藍圖是否能找到相應的API藍圖測試、命令插件測試、自定義配置文件測試藍圖成功配置的證據(jù)
六:與數(shù)據(jù)庫交互。一:安裝與數(shù)據(jù)庫建立關系的道路插件。二:安裝與數(shù)據(jù)庫映射的插件。三:安裝與數(shù)據(jù)庫操作命令的插件。四:串起來更加方便的使用(非常棒)便于理解:與數(shù)據(jù)庫交互有以下操作
增加:insert into
刪除:delete from
修改:update....set
查詢:select...from
.........
這些插件與App、數(shù)據(jù)庫之間的關系,或者說是插件的作用:
數(shù)據(jù)放入數(shù)據(jù)庫,數(shù)據(jù)持久化
flask app數(shù)據(jù)庫
| pymysql(插件,用于建立關系)
| 與數(shù)據(jù)映射需要flask_sqlalchemy插件,大概操作:
| 將SQLALchemy()關聯(lián)到Flask App中
| db=SQLALchemy()
| db.init_app(app)
|
ORM.映射:
類 表
屬性:id,name 字段:id,name
對象 一條數(shù)據(jù)
2.現(xiàn)在開始安裝插件:
1.pip install pymysql 驅(qū)動,先將公路聯(lián)系建立起來
2.pip install flask_sqlalchemy 完成數(shù)據(jù)庫映射
3.pip install flask-migrate 用于發(fā)布命令的插件pip install pymysql 的安裝pip install flask_sqlalchemy 安裝flask_sqlalchemy 安裝成功安裝命令工具migrate(不是命令管理工具,管理的是flask-script工具)數(shù)據(jù)庫命令工具安裝成功
3.SQLAlchemy: ORM.映射關系
flask-sqlalchemy:基于SQLAlchemy,做了提升.使程序員在開發(fā)的時候更加方便.
4.環(huán)境配置步驟:配置數(shù)據(jù)庫的路徑
#mysql+pymysql://user:password@hostid:port/databasename
SQLALCHEMY_DATABASE_URI='mysql+pymysql://yh:123@127.0.0.1:3306/taskday5'
#配置文件
class Config:
# 后端代碼變項目自動重新啟動
ENV='development'
DEBUG=True
#mysql+pymysql://user:password@hostid:port/databasename,數(shù)據(jù)庫配置
SQLALCHEMY_DATABASE_URI='mysql+pymysql://yh:123@localhost:3306/taskday05_5'
SQLALCHEMY_TRACK_MODIFICATIONS=False
#其它。。。
2.創(chuàng)建包extends
在 __init__.py 中添加:
db=SQLAlchemy() ------------->之后必須掛載到app中,也就是create_app()方法中
#sqlalchemy插件的調(diào)用,用于映射類與數(shù)據(jù)庫中的表的
from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()
在create_app()方法中掛載,也就是使得當前App可用使用該插件
def create_app():
....
db.init_app(app)
...
return app
from flask import Flask
import settings
from extends import db
from apps.users.view import user_bp
def create_app():
#使用flask創(chuàng)建app對象,并且修改默認的靜態(tài)文件與模板尋找的路徑
app=Flask(__name__,template_folder='../templates',static_folder='../static')
#導入自己需要的配置文件
app.config.from_object(settings.Config)
#為App掛載藍圖
app.register_blueprint(user_bp)
#為App掛載與數(shù)據(jù)庫操作的插件
db.init_app(app=app)
#打印路由
print(app.url_map)
return app
3.將migrate命令工具交給命令管理工具flask-script,更加方便使用
migrate:命令工具,需要與Manager(flask-script插件)關聯(lián)起來,把命令交給Manager管理,操作命令影響數(shù)據(jù)庫的映射
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from apps import create_app
from extends import db
app=create_app() #調(diào)用創(chuàng)建App的自定義方法
manager=Manager(app=app) #將app項目交給命令管理工具,方便管理數(shù)據(jù)庫映射命令(其中之一)
#將migrate命令工具交給命令管理工具flask-script
migrate=Migrate(app=app,db=db) #指定命令管理工具影響的app,需要數(shù)據(jù)庫命令
manager.add_command('db',MigrateCommand) #將命令工具的命令交給命令管理工具,然后使用“db”作為標識
if __name__ == '__main__':
#app.run()
manager.run()
4.創(chuàng)建模型,完成類與數(shù)據(jù)庫的一一映射:
models.py
模型就是類
class User如下
class User(db.Model):
#db.Column(類型) 映射表中的列
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
username=db.Column(db.String(15),nullable=False)
password=db.Column(db.String(15),nullable=False)
phone=db.Column(db.String(11),unique=True)
rdatetime=db.Column(db.DateTime,default=datetime.now)創(chuàng)建需要與數(shù)據(jù)庫映射的類
#用于創(chuàng)建User類
from datetime import datetime
from extends import db
'''
使用一些命令之后,該類與數(shù)據(jù)庫中的表會實現(xiàn)一一映射
'''
class User(db.Model):
# db.Column(類型) 映射表中的列
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(15), nullable=False)
phone = db.Column(db.String(11), unique=True)
rdatetime = db.Column(db.DateTime, default=datetime.now)
5.使用命令:
a.敲黑板........
在app.py中導入模型:from apps.user.model import User *一定需要*在apps中導入需要映射的類一定要數(shù)據(jù)庫配置一定也要正確
b.在終端中使用命令:db
命令1:python app.py db init ----------->產(chǎn)生一個文件夾migrations,該命令只需要成功執(zhí)行一次即可命令執(zhí)行與效果顯示
命令2:python app.py db migrate----->產(chǎn)生一個版本文件執(zhí)行命令之后會生成一個版本文件
命令3:python app.py db upgrade---->完成映射使用命令完成映射的命令與驗證是否成功
命令4:python app.py db downgrade-->完成映射,根據(jù)當前本版降級到上一個版本的樣子
c.項目完成之后的基本目錄結構:目錄結構
|--apps
|--extends
|--migrations
|---versions 版本文件夾
|--6bffd38e9879_.py------>產(chǎn)生依賴于python app.py db migrate 的執(zhí)行
|--56e4105b18ec_.py------>產(chǎn)生依賴于python app.py db migrate 的執(zhí)行
現(xiàn)在移植成功之后,將它升級(與數(shù)據(jù)庫映射)即可:
|--與數(shù)據(jù)庫同步------>產(chǎn)生依賴于python app.py db upgrate命令的執(zhí)行,完 成升級,完成映射。
|--與前一個數(shù)據(jù)庫同步------>產(chǎn)生依賴于python app.py db downgrate命令的執(zhí)行,完成降級,降級到當前版本的前一個版本,同時完成映射
flask之web開發(fā)最基本的,而且方便適用的東西,前邊可能會麻煩一點,但是之后用起來會很爽
總結
以上是生活随笔為你收集整理的python学籍管理系统 flask_taskday05-Python之flask学习 web开发最基本的需要(特别详细且适用)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡托管精养的风险大吗?不要抱有侥幸心
- 下一篇: 刷POS机账户冻结了怎么办?可以试试这么