今天测试 没过
后端代码出问题了nnd
安装相应的python 包
# 用于flask在使用ORM模型操作数据库
pip install flask-sqlalchemy
# Python操作数据库的驱动程序
pip install pymysql
# 对密码加密和解密
pip install cryptography
# 用于将ORM模型的变更同步到数据库中
pip install flask-migrate
1
2
3
4
5
6
7
8
config.py文件
在根目录下,常见一个config.py的python文件,用来存放配置项。
class BaseConfig:
SECRET_KEY = 'linql_test'
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 开发环境
class DevelopmentConfig(BaseConfig):
# 配置连接数据库
HOSTNAME = '192.168.3.5' #服务器地址
PORT = 3306 #默认端口号
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'pythonbbs' #数据库名
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
# 测试环境
class TestingConfig(BaseConfig):
# 配置连接数据库
HOSTNAME = '192.168.3.5' # 服务器地址
PORT = 3306 # 默认端口号
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'pythonbbs' # 数据库名
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
# 生产部署环境
class ProductionConfig(BaseConfig):
# 配置连接数据库
HOSTNAME = '192.168.3.5' # 服务器地址
PORT = 3306 # 默认端口号
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'pythonbbs' # 数据库名
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
在app.py中,绑定配置
from flask import Flask
import config
app = Flask(__name__)
# 引入开发环境
app.config.from_object(config.DevelopmentConfig)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
exts.py文件
在根目录里创建exts.py文件,主要用来存放一些第三方插件的对象。
如:SQLAlchemy对象、Flask-Mail对象等。
目的,是为了防止循环引用。
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
1
2
回到app.py中,然后导入db变量,再通过db.init_app(app)完成初始化。
from flask import Flask
import config
from exts import db
app = Flask(__name__)
# 引入开发环境
app.config.from_object(config.DevelopmentConfig)
# 初始化db
db.init_app(app)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
blueprints模块
通过蓝图来模块化,创建一个blueprints的包,用于存放蓝图模块。
在项目名称上右击,New->Python Package
并在,blueprints下,分别创建名为:cms、front和user的python文件
在cms.py中创建蓝图对象
from flask import Blueprint
bp = Blueprint("cms",__name__,url_prefix="/cms")
1
2
在front.py中创建蓝图对象
from flask import Blueprint
bp = Blueprint("front",__name__,url_prefix="")
在user.py中创建蓝图对象
from flask import Blueprint
bp = Blueprint("user",__name__,url_prefix="/user")
1
2
创建了蓝图对象,并指定了url前缀,因front是面向前台的,所以url为空
创建蓝图对象后,还需要在app.py中完成注册。
一、Flask后端接口技术
Flask是由python开发的轻量的web框架,小巧,灵活,一个脚本就可以启动一个web项目。
Flask的程序思路可以从点餐平台的点餐流程说开去。
1、由点餐说到flask返回页面内容
说到点餐,一般是在饿了吗或者美团这个平台上选择你喜欢的菜品,在这个平台上面集中了很多商家的特色食品,凉菜、热菜及特色菜应用尽有。你点过餐了以后,你只需要等待外卖小哥把订餐送到你的手中就可以了。然而,外卖小哥接单后,需要到指定的餐馆购买指定的食品,如我点了一家“黄焖鸡”主题店的“大份黄焖鸡米饭”,外卖小哥就要到指定的“黄焖鸡”主题店购买到指定的“大份黄焖鸡米饭”后,马不停蹄地来到顾客面前来送餐,外卖小哥接单的时候,有的是携带着顾客的要求,“不吃辣,不吃香菜”等要求,回来送到顾客手中的时候,一定是一碗大份的黄焖鸡米饭。具体流程如下图所示。
flask编程程序的思路与我们日常点餐的流程是一致的。这里的Flask程序就可以理解成点餐平台,在点餐平台上有很多的菜品,在实现python程序时,调用主程序会使name==”main”语句,这表明name中不光只有main,可能还有其它进程,只有name的进程名称是main时,才会触发主程序的执行。那么name中的名字就可以形象地理解成各中特色的菜单,Flask平台中把name包裹起来,就相当于把菜单上传到到点餐平台中。然后点餐平台就可以调用外卖小哥对客户的点餐进行接单和跑单。代码如下。
#导包
from flask import Flask
#相当于把菜单整合到平台中
app=Flask(__name__,template_folder="myfolder")
#调用主程序
if __name__=="__main__":
#相当于app理解成外卖小哥,代替本人去购餐送餐
app.run()
目前,上面的代码没有实现点餐,只有点过餐了,外卖小哥才会有目地性的去跑,现在相当于的哥没有乘客时的瞎转,一直在寻找着乘客,代码中没有指定具体点餐内容的flask就相当于外卖小哥没有接单时,在漫无目的的等待。只有客户有新的订单,外卖小哥接到单后,就会到指定的地点购餐,然后把购得的餐再返回给客户。点餐的实现就是限定了外卖小哥只能到指定的地点进行购买指定的餐饮,不然客户是不能接受付款的。Python需要一个技术实现特定条件限定的方法,即满足只有黄焖鸡店才能购买的黄焖鸡米饭。实现这个技术的方法在Python中使用装饰器即可以做到,装饰器可以实现满足一定函数要求的内容才能访问这个页面。如访问百度页面,只有满足输入“www.baidu.com”这样的网址才能访问百度页面。因此,装饰器的技术只需限定只有某个地址才能访问相关的页面,其他的地址是不能访问此页面的。flask中提供的路由技术实现了这样的需求。这样,通过@app.route指定具体的地址去做什么样的事情就可以了。@app.route就是修饰def方法的路由。在def修饰的方法中必须返回内容相当于返回的餐饮,如是程序员中最精典的程序“Hello World”,“你好,世界”展现了程序员拥抱世界的态度。