手把手制作Vue3+Flask全栈项目 全栈开发之路实战篇 问卷网站(二)管理员后台

全栈开发一条龙——前端篇
第一篇:框架确定、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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值