python學籍管理系統 flask_taskday05-Python之flask學習 web開發最基本的需要(特別詳細且適用)...

1.首先一個Flask的Web項目的創建需求一(文章概述):一:必須實現命令工具管理App,用于在命令行輸入命令對項目進行管理,對后期多多益善

二:必須實現“藍圖”管理,用于將app啟動函數與路由分開管理,使得項目啟動文件、API路由管理更加更加清晰

三:必須實現類與數據庫之間的映射,方便的實現App中的類與數據庫中的表一一映射,更加簡易的實現對數據庫的增、刪、改、查操作

2.現在來創建一個Flask項目項目默認創建項目默認目錄結構

3.實現命令工具管理App,首先需要自定義一個創建App的方法,然后安裝flask-script插件,使用插件的Manager()構建對象,具體如下:為了方便直接先安裝插件flask-script,先后無影響:pip install flask-script安裝命令管理工具的插件

2.第一次修改默認目錄。一:刪除默認app啟動部分代碼。二:創建apps包,在init中創建項目創建的方法。三:導入自己需要的開發配置文件。四:將app交給命令工具管理插件

一.第一步

#配置文件

class Config:

# 后端代碼變項目自動重新啟動

ENV='development'

DEBUG=True

#mysql+pymysql://user:password@hostid:port/databasename,數據庫配置

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創建app對象,并且修改默認的靜態文件與模板尋找的路徑

app=Flask(__name__,template_folder='../templates',static_folder='../static')

#導入自己需要的配置文件

app.config.from_object(settings.Config)

#為App掛載藍圖

#為App掛載與數據庫操作的插件

#打印路由

print(app.url_map)

return app

四:

from flask_script import Manager

from apps import create_app

app=create_app() #調用創建App的自定義方法

manager=Manager(app=app) #將app項目交給命令管理工具,方便管理數據庫映射命令(其中之一)

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路由一:創建"藍圖",Blueprint()管理對應類的API構建藍圖,‘user’可以方便用于url_for()相結合

#用于存放視圖函數

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 '用戶信息展示'

二:在創建app的方法(create_app())中掛載藍圖,使用app.register_blueprint()方法掛載藍圖

from flask import Flask

import settings

from apps.users.view import user_bp

def create_app():

#使用flask創建app對象,并且修改默認的靜態文件與模板尋找的路徑

app=Flask(__name__,template_folder='../templates',static_folder='../static')

#導入自己需要的配置文件

app.config.from_object(settings.Config)

#為App掛載藍圖

app.register_blueprint(user_bp)

#為App掛載與數據庫操作的插件

#打印路由

print(app.url_map)

return app

四:測試藍圖是否能找到相應的API藍圖測試、命令插件測試、自定義配置文件測試藍圖成功配置的證據

六:與數據庫交互。一:安裝與數據庫建立關系的道路插件。二:安裝與數據庫映射的插件。三:安裝與數據庫操作命令的插件。四:串起來更加方便的使用(非常棒)便于理解:與數據庫交互有以下操作

增加:insert into

刪除:delete from

修改:update....set

查詢:select...from

.........

這些插件與App、數據庫之間的關系,或者說是插件的作用:

數據放入數據庫,數據持久化

flask app數據庫

| pymysql(插件,用于建立關系)

| 與數據映射需要flask_sqlalchemy插件,大概操作:

| 將SQLALchemy()關聯到Flask App中

| db=SQLALchemy()

| db.init_app(app)

|

ORM.映射:

類 表

屬性:id,name 字段:id,name

對象 一條數據

2.現在開始安裝插件:

1.pip install pymysql 驅動,先將公路聯系建立起來

2.pip install flask_sqlalchemy 完成數據庫映射

3.pip install flask-migrate 用于發布命令的插件pip install pymysql 的安裝pip install flask_sqlalchemy 安裝flask_sqlalchemy 安裝成功安裝命令工具migrate(不是命令管理工具,管理的是flask-script工具)數據庫命令工具安裝成功

3.SQLAlchemy: ORM.映射關系

flask-sqlalchemy:基于SQLAlchemy,做了提升.使程序員在開發的時候更加方便.

4.環境配置步驟:配置數據庫的路徑

#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,數據庫配置

SQLALCHEMY_DATABASE_URI='mysql+pymysql://yh:123@localhost:3306/taskday05_5'

SQLALCHEMY_TRACK_MODIFICATIONS=False

#其它。。。

2.創建包extends

在 __init__.py 中添加:

db=SQLAlchemy() ------------->之后必須掛載到app中,也就是create_app()方法中

#sqlalchemy插件的調用,用于映射類與數據庫中的表的

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創建app對象,并且修改默認的靜態文件與模板尋找的路徑

app=Flask(__name__,template_folder='../templates',static_folder='../static')

#導入自己需要的配置文件

app.config.from_object(settings.Config)

#為App掛載藍圖

app.register_blueprint(user_bp)

#為App掛載與數據庫操作的插件

db.init_app(app=app)

#打印路由

print(app.url_map)

return app

3.將migrate命令工具交給命令管理工具flask-script,更加方便使用

migrate:命令工具,需要與Manager(flask-script插件)關聯起來,把命令交給Manager管理,操作命令影響數據庫的映射

from flask_migrate import Migrate, MigrateCommand

from flask_script import Manager

from apps import create_app

from extends import db

app=create_app() #調用創建App的自定義方法

manager=Manager(app=app) #將app項目交給命令管理工具,方便管理數據庫映射命令(其中之一)

#將migrate命令工具交給命令管理工具flask-script

migrate=Migrate(app=app,db=db) #指定命令管理工具影響的app,需要數據庫命令

manager.add_command('db',MigrateCommand) #將命令工具的命令交給命令管理工具,然后使用“db”作為標識

if __name__ == '__main__':

#app.run()

manager.run()

4.創建模型,完成類與數據庫的一一映射:

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)創建需要與數據庫映射的類

#用于創建User類

from datetime import datetime

from extends import db

'''

使用一些命令之后,該類與數據庫中的表會實現一一映射

'''

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中導入需要映射的類一定要數據庫配置一定也要正確

b.在終端中使用命令:db

命令1:python app.py db init ----------->產生一個文件夾migrations,該命令只需要成功執行一次即可命令執行與效果顯示

命令2:python app.py db migrate----->產生一個版本文件執行命令之后會生成一個版本文件

命令3:python app.py db upgrade---->完成映射使用命令完成映射的命令與驗證是否成功

命令4:python app.py db downgrade-->完成映射,根據當前本版降級到上一個版本的樣子

c.項目完成之后的基本目錄結構:目錄結構

|--apps

|--extends

|--migrations

|---versions 版本文件夾

|--6bffd38e9879_.py------>產生依賴于python app.py db migrate 的執行

|--56e4105b18ec_.py------>產生依賴于python app.py db migrate 的執行

現在移植成功之后,將它升級(與數據庫映射)即可:

|--與數據庫同步------>產生依賴于python app.py db upgrate命令的執行,完 成升級,完成映射。

|--與前一個數據庫同步------>產生依賴于python app.py db downgrate命令的執行,完成降級,降級到當前版本的前一個版本,同時完成映射

flask之web開發最基本的,而且方便適用的東西,前邊可能會麻煩一點,但是之后用起來會很爽

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446107.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446107.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux加密框架crypto AES代碼相關

例子 aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.11) - Bootlin static struct crypto_alg aes_alg {.cra_name "aes",.cra_driver_name "aes-generic",.cra_priority 100,.cra_flags CRYPTO_ALG_TYPE_CIPHER,.cra_blocks…

python語言print函數_Python 的 print 函數

Python 2.x 系列已經停止維護了, python 3.x 系列正在成為主流,盡管有些項目還是python2.x 的,之后寫Python 代碼為了保持兼容性,還是盡量和Python 3 標準保持一致作為一個Python newbee 而言, python 2.x 和 3.x 的 …

Linux加密框架crypto crypto_alg|cipher_alg數據結構|AES例子

加密框架將算法的屬性抽象為算法說明數據結構struct crypto_alg,加密框架中的每一個算法(基礎算法和衍生算法)都表示為一個算法說明數據結構的實例,因此將struct crypto_alg稱為通用算法說明數據結構。后續章節中如無特殊說明&…

python如何運用ols_使用OLS回歸(Python,StatsModels,Pandas)預測未來值

我目前正試圖在Python中實現一個MLR,我不知道如何去應用我發現的未來值的系數。使用OLS回歸(Python,StatsModels,Pandas)預測未來值import pandas as pdimport statsmodels.formula.api as smimport statsmodels.api as sm2TV [230.1, 44.5,…

Linux加密框架 crypto RC4

參考鏈接 arc4.h Linux加密框架中的主要數據結構(一)_家有一希的博客-CSDN博客 頭文件 arc4.h - include/crypto/arc4.h - Linux source code (v5.15.11) - Bootlin實現代碼 arc4.c arc4.c - crypto/arc4.c - Linux source code (v5.15.11) - Bootlin…

python讀txt轉array_python將txt文件讀入為np.array的方法

原文件:7.8094,1.0804,5.7632,0.012269,0.008994,-0.003469,-0.79279,-0.064686,0.11635,0.68827,5.7169,7.9329,0.010264,0.003557,-0.011691,-0.57559,-0.56121,原文件數據比較多,是一個125行,45類float數字。代碼:# -*- coding…

Linux加密框架 crypto 哈希算法說明 同步哈希shash_alg | 異步哈希 ahash_alg | 通用部分抽象 hash_alg_common

參考鏈接 Linux加密框架中的主要數據結構(二)_家有一希的博客-CSDN博客 定義 通用算法說明數據結構crypto_alg的聯合體成員變量cra_u中包含多種算法的個性化屬性,如分組算法、塊加密算法、壓縮算法、偽隨機數算法等,但不包含哈希…

python 列表間隔取值_python list數據等間隔抽取并新建list存儲的例子

原始數據如下:[e3cd, e547, e63d, 0ffd, e39b, e539, e5be, 0dd2, e3d6, e52e, e5f8, 0000, e404, e52b, e63d, 0312, e38b]將其分割為4路數據,分別存儲在fetal1、fetal2、mother1、ECG的列表中,各列表對齊,不能整除于4的數據舍去…

Linux加密框架 crypto 哈希算法舉例 MD5

參考鏈接 Linux加密框架 crypto 哈希算法說明 同步哈希shash_alg | 異步哈希 ahash_alg | 通用部分抽象 hash_alg_common_CHYabc123456hh的博客-CSDN博客Linux加密框架中的主要數據結構(二)_家有一希的博客-CSDN博客 MD5 md5.h - include/crypto/md5.h …

事務沒提交的數據查的出來嗎?_“金三銀四”面試官:說說事務的ACID,什么是臟讀、幻讀?...

一、事務事務是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成。--摘自百科在MySQL里,事務是在引擎層面實現,比如MyIsam不支持,InnoDB支持面試清單(Java崗):JavaJVM數…

Linux加密框架 crypto 算法模板

參考鏈接 Linux加密框架中的主要數據結構(三)_家有一希的博客-CSDN博客algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin 定義 struct crypto_template {struct list_head list;struct hlist_head instances;struct modu…

python找最長的字符串_為Python找到最長重復字符串的有效方法(從Pearls編程)

我的解決方案是基于后綴數組。它是由最長公共前綴的兩倍前綴構成的。最壞情況下的復雜度是O(n(logn)^2)。任務”伊利亞特.mb.txt“在我的筆記本上花了4秒鐘。代碼在函數suffix_array和longest_common_substring中有很好的文檔記錄。后一個函數很短,可以很容易地修改…

Linux加密框架 crypto 算法模板 CBC模板舉例

參考鏈接 Linux加密框架中的主要數據結構(三)_家有一希的博客-CSDN博客https://blog.csdn.net/CHYabc123456hh/article/details/122194754 CBC算法模板 cbc.c - crypto/cbc.c - Linux source code (v5.15.11) - BootlinCBC算法模板屬性 1)CBC算法模板名…

leetcode數組匯總_LeetCode刷題實戰43:字符串相乘

算法的重要性,我就不多說了吧,想去大廠,就必須要經過基礎知識和業務邏輯面試算法面試。所以,為了提高大家的算法能力,這個公眾號后續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家…

Linux加密框架 crypto 算法模板 HMAC模板舉例

參考鏈接 Linux加密框架中的主要數據結構(三)_家有一希的博客-CSDN博客Linux加密框架 crypto 算法模板_CHYabc123456hh的博客-CSDN博客 HMAC算法模板 hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlinhmac.c - crypto/hmac.c - Linux…

判斷非負整數是否是3的倍數_五年級數學因數與倍數知識點匯總與解題方法技巧...

在日常教學過程中,我發現孩子們和某些家長對學習數學的方法有一些誤區,就是覺著數學,單純就是邏輯思維,只要多做練習題就能學好,但是不是這樣的,低年級的學生,學習數學還是以背誦為主&#xff0…

tcp通訊一次最多能發送多少數據?_關于TCP/IP,必須知道的十個知識點

本文整理了一些TCP/IP協議簇中需要必知必會的十大問題,既是面試高頻問題,又是程序員必備基礎素養。一、TCP/IP模型TCP/IP協議模型(Transmission Control Protocol/Internet Protocol),包含了一系列構成互聯網基礎的網絡…

Linux內核crypto子系統的調用邏輯

testmgr.c - crypto/testmgr.c - Linux source code (v5.15.11) - Bootlin上述代碼是內核內部即crypto子系統對外提供密碼服務的測試程序調用流程&#xff1a;crypto API <—> crypto core <—> crypto_register_alg處于用戶態的程序想要調用處于內核態的密碼算法&…

python成語填空_python定期循環成語?

我有一個工作單位我希望每N秒發生一次.如果我使用簡單化minute 60while True:doSomeWork()time.sleep(minute)取決于doSomeWork()花費的時間,實際循環周期將是一分鐘加上那個時間.如果doSomeWork()所花費的時間不是確定性的,則工作周期更加難以預測.我想做的就是這樣minute 6…

Linux加密框架 crypto算法模板 以及CBC算法模板實例

參考鏈接 Linux加密框架中的主要數據結構&#xff08;四&#xff09;_家有一希的博客-CSDN博客algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin struct crypto_instance {struct crypto_alg alg;struct crypto_template *tmpl;union {/* Node i…