全栈开发一条龙——前端篇
第一篇:框架确定、ide设置与项目创建
第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。
第三篇:setup语法,设置响应式数据。
第四篇:数据绑定、计算属性和watch监视
第五篇 : 组件间通信及知识补充
第六篇:生命周期和自定义hooks
第七篇:路由
第八篇:传参
第九篇:插槽,常用api和全局api。
全栈开发一条龙——全栈篇
第一篇:初识Flask&MySQL实现前后端通信
第二篇: sql操作、发送http请求和邮件发送
第三篇:全栈实现发送验证码注册账号
第四篇:图片验证码及知识补充
全栈开发一条龙——实战篇
第一篇:项目建立与login页面
本章我们进入后台管理员视图的开发
一、后端
在后端,我们会遇到循环引用的问题:我们在进行后端蓝图的编写的时候,一定会要用到app(flask对象)来操作数据库,但是app我们之前放在了main.py中,这就很吊诡了,我们启动main服务,就要调用蓝图程序,而蓝图程序又要调用main中初始化的app来进行上下文操作,这就造成了循环引用(死锁),所以我们要改进我们的后端代码结构。
set_app
我们使用set_app把建立app对象的过程独立出来
from flask import Flask,jsonify,request
#jsonify将py数据转换为json数据,传给前端接口
from flask_cors import CORS
#跨域,因为有浏览器的同源策略,不同协议、域名、端口不能通信,我们要用cors来通信
from sqlalchemy import text
from flask.views import MethodView
#建立对象
app = Flask(__name__)
#转码,老外跟我们用的不一样,不改会乱码,如果有中文你要加上
app.config["JSON_AS_ASCII"] = False
main
接下来修改一下main,使得在main里我们正确的初始化app
from flask import Flask,jsonify,request
#jsonify将py数据转换为json数据,传给前端接口
from flask_cors import CORS
#跨域,因为有浏览器的同源策略,不同协议、域名、端口不能通信,我们要用cors来通信
from sqlalchemy import text
from flask.views import MethodView
from set_app import app
from login.login_blueprint import login
app.register_blueprint(login)
from dataset_info import *
#导入数据库
from data_set import db
# 配置数据库
URI = "mysql://" + mysql_account + ":" + mysql_password + "@" + mysql_host + ":" + mysql_port + "/" + mysql_data_col+"?charset=utf8"
app.config["SQLALCHEMY_DATABASE_URI"] = URI
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
#初始化操作
db.init_app(app)
#配置跨域,*表示所有人
CORS(app,cors_allowed_orgins = "*")
import sql_ex_blueprint
app.register_blueprint(sql_ex_blueprint.sqlex)
if __name__ == "__main__":
#调试模式 这样每次修改代码不用每次重启服务
app.run(debug=True, host = "0.0.0.0",port = 5000)
sql_ex
我们专门建立一个操作数据库的文件,防止我们的服务蓝图文件内容过多无法维护。
首先,我们要先建立一个数据库对象
class sql_ex_object(db.Model):
__tablename__ = 'questions'
questions = db.Column(db.String(300))
choice_a = db.Column(db.String(80))
choice_b = db.Column(db.String(80))
choice_c = db.Column(db.String(80))
choice_d = db.Column(db.String(80))
point_a = db.Column(db.Integer)
point_b = db.Column(db.Integer)
point_c = db.Column(db.Integer)
point_d = db.Column(db.Integer)
id = db.Column(db.String(45),primary_key = True)
tablename是跟数据库中的column名一样,这里确保要和数据库中的一一对应。
class sql_ex():
def add(self,question,a,b,c,d,ap,bp,cp,dp,id):
with app.app_context():
question_add = sql_ex_object()
question_add.questions = question
question_add.choice_a = a
question_add.choice_b = b
question_add.choice_c = c
question_add.choice_d = d
question_add.point_a = ap
question_add.point_b = bp
question_add.point_c = cp
question_add.point_d = dp
question_add.id = id
try:
db.session.add(question_add)
db.session.commit()
db.session.close()
print("\n\n\ncg\n\n\n")
return "添加成功"
except:
return "题目已存在!"
def delete(self,id):
with app.app_context():
question_delete = sql_ex_object.query.filter(sql_ex_object.id==id).first()
try:
db.session.delete(question_delete)
db.session.commit()
db.session.close()
return "删除成功"
except:
return "删除失败"
def search(self):
with app.app_context():
raw_list = db.session.execute( text("select * from questions") ).fetchall()
list = list_row2list_dic(raw_list)
print(list)
这里的内容我们基本之前的内容都讲过,就是我们题目的增删改查的工具箱,唯一的问题是,请不要忘记在每个的开头加上with app.app_content()这是在声明我以下的代码是在flask的app环境下运行的,这样才能正确的使用flask的数据库。
完整代码如下
from set_app import app
from data_set import db
from flask import current_app
from sqlalchemy import text
with app.app_context():
# ctx = app.app_context()
# ctx.push()
def list_row2list_dic(list_row):
dic_temp = {
}
list_dic = []
for x in list_row:
listda = []
listidx= []
for dx in x:
listda.append(dx)
xx = x._key_to_index
for idx in xx:
listidx.append(idx)
dic_temp=dict(zip(listidx,listda))
list_dic.append(dic_temp)
return list_dic
class sql_ex_object(db.Model):
__tablename__ = 'questions'
questions = db.Column(db.String(300))
choice_a = db.Column(db.String(80))
choice_b = db.Column(db.String(80))
choice_c = db.Column(db.String(80))
choice_d = db.Column(db.String(80))
point_a = db.Column(db.Integer)
point_b = db.Column(db.Integer)
point_c = db.Column(db.Integer)
point_d = db.Column(db.Integer)
id = db.Column(db.String(45),primary_key = True)
class sql_ex():
def add(self,question,a,b,c,d,ap,bp,cp,dp,id):
with app.app_context():
question_add = sql_ex_object()
question_add.questions = question
question_add.choice_a = a
question_add.choice_b = b
question_add.choice_c = c
question_add.choice_d = d
question_add.point_a = ap
question_add.point_b = bp
question_add.point_c = cp
question_add.point_d = dp
question_add.id = id
try:
db.session.add(question_add

最低0.47元/天 解锁文章
9322

被折叠的 条评论
为什么被折叠?



