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.mzph.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…