当前位置: 首页 > news >正文

网站开发详细设计文档模板网站排名优化机构

网站开发详细设计文档模板,网站排名优化机构,公司推广发帖网站怎么做,游戏开发需要什么学历业务逻辑不能用http状态码判断#xff0c;应该有自己的逻辑判断。想要前端需要判断#xff08;好多if…else#xff09;#xff0c;所以需要标准化#xff0c;标准化返回。 json标准化返回: 最外面#xff1a;data,message,code三个字段。 data#xff1a;返回的数据 co…业务逻辑不能用http状态码判断应该有自己的逻辑判断。想要前端需要判断好多if…else所以需要标准化标准化返回。 json标准化返回: 最外面data,message,code三个字段。 data返回的数据 code应用状态码先设计好成功-0失败–登录失败1注册失败2 msg返回的说明 我们写的接口也要按照这个格式来 添加libs/response.py def generate_response(data None, msg success!, code 10000):# 约定返回的数据格式if data is None:data []return {code: code,msg: msg,data: data}然后修改返回 login.py from flask import Blueprint, request from config.settings import user_dict from libs.response import generate_responselogin_bp Blueprint(login_bp, __name__, url_prefix/v1)login_bp.route(login) def login():user request.json.get(username)passwd request.json.get(passwd)local_user_passwd user_dict.get(user)if local_user_passwd and passwd local_user_passwd:return generate_response(msgsuccess)return generate_response(msglogin fail!, code10001)register.py from flask import Blueprint, request from config.settings import user_dict from libs.response import generate_responseregister_bp Blueprint(register_bp, __name__, url_prefix/v1)register_bp.route(register) def register():username request.json.get(username)passwd request.json.get(passwd)re_passwd request.json.get(re_passwd)if not (username and passwd and re_passwd):return generate_response(msg参数传递不完整, code3)elif passwd ! re_passwd:return generate_response(msg注册密码不一致, code2)elif username in user_dict:return generate_response(msg用户已注册,code1)else:user_dict[username] passwdprint(fuser_dict is {user_dict})return generate_response(msgregister success!, code10000)连接数据库为了避免频繁的打开关闭消耗过多资源 libs/conn_mysql.py import pymysql from config.settings import DB_PASS, DB_PORT, DB_SCHEM, DB_USER, DB_HOSTdef conn_mysql():conn pymysql.connect(host DB_HOST,port DB_PORT,user DB_USER,password DB_PASS,db DB_SCHEM)return conn为了只连一次绑到app上 app.py添加 上面返回了一个连接对象conn把他作为一个属性交给了sq_app对象再给sq_app对象随意的可以设置属性自己定义mysql_db。所以把连接交给了app。 def create_app():#连接数据库sq_app.mysql_db conn_mysql()刚好flask提供了一个current_app在你请求过来的时候会把你当前的app的上下文内容放在current_app里。 router/product_view/product.py from . import product_bp from flask import current_app from libs.response import generate_responseproduct_bp.route(/product/get) def get_product():# import pymysql# db pymysql.connect(host192.168.1.150,# userjiangda97,# passwordJiangda123#,# databasesq-flask)cursor current_app.mysql_db.cursor()cursor.execute(select * from product_info)data cursor.fetchall()print(data)# db.close()if data:return generate_response(datadata, msgget product info success!)else:return generate_response(msgget data empty, code 4)router/product_view/__init__.py from flask import Blueprint product_bp Blueprint(product_bp, __name__, url_prefix/v1)from . import product分表 优点节省空间避免数据不必要的膨胀。 缺点: 新增了一个product_kind_table表 select product_info.product_id, product_info.product_name, product_kind_table.kind, product_info.product_price, product_info.product_address from product_info inner join product_kind_table on product_kind id where product_id 1修改代码router/product_view/product.py # 通过url携带参数来传递idid request.args.get(id)if id is None:sql_str fselect product_info.product_id, product_info.product_name, product_kind_table.kind, product_info.product_price, product_info.product_address \from product_info inner join product_kind_table \on product_kind id\where product_id {id}else:sql_str fselect product_info.product_id, product_info.product_name, product_kind_table.kind, product_info.product_price, product_info.product_address \from product_info inner join product_kind_table \on product_kind id\where product_id {id}cursor current_app.mysql_db.cursor()cursor.execute(sql_str)data cursor.fetchall()# print(data)# db.close ()if data:return generate_response(datadata, msgget product info success!)else:return generate_response(msgget data empty, code 4)ORM object relation mapping对象关系映射 orm对象持久化对象 数据库的表 – 类 表中的字段 – 属性 一行行记录 – 对象 models/__init__.py from flask_sqlalchemy import SQLAlchemy#生成对象映射实例db就是我们的中间层 db SQLAlchemy()def init_app_db(app):db.init_app(app)models/product.py from . import dbclass ProductInfo(db.Model):__tablename__ product_infoproduct_id db.Column(db.Integer, primary_keyTrue, autoincrementTrue)product_name db.Column(db.String(256))product_kind db.Column(db.Integer)product_price db.Column(db.Float)product_address db.Column(db.String(128))都得运行init文件添加from . import product 绑定到核心对象app.py文件添加 import modelsmodels.init_app_db(sq_app) 最后运行报错 RuntimeError: Either ‘SQLALCHEMY_DATABASE_URI’ or ‘SQLALCHEMY_BINDS’ must be set. 意思是需要设置这两个变量即orm映射的数据库信息。 config/settings.py添加 SQLALCHEMY_DATABASE_URI mysqlpymysql://jiangda97:Jiangda123#192.168.1.150:3306/sq-flask之前我们在app.py将settings都读入sq_app.config里了且是都大写的key。 刚好我们的SQLAchemy底层就是会自动读取sq_app.config里的关于连接数据库的操作。 SQLALCHEMY_DATABASE_URI “mysqlpymysql://jiangda97:Jiangda123#192.168.1.150:3306/sq-flask” 底层用的连接方式://用户名:密码host:port/数据库名 然后我们准备用它来完成一个增加操作在router/product_view/product.py from models.product import ProductInfo from models import db# 新增数据库记录 product_bp.route(/product/add, methods[POST]) def product_add():# 接收客户端的传递pro_name request.json.get(proname)pro_kind request.json.get(prokind)pro_price request.json.get(proprice)pro_address request.json.get(proadd)# 实例化类成对象proinfo ProductInfo()# 设置属性proinfo.product_name pro_nameproinfo.product_kind pro_kindproinfo.product_price pro_priceproinfo.product_address pro_address# 实例化并设置属性也可以这么写# proinfo ProductInfo(product_name pro_name,# product_kind pro_kind,# product_price pro_price,# product_address pro_address)# 生效到数据库db.session.add(proinfo)db.session.commit()return generate_response(msgadd success!)migrate 添加models/product.py 在该类下 add_time db.Column(db.DateTime, defaultdatetime.datetime.now())数据库迁移工具版本管理 – flask-migrate 改server.py # 数据库迁移工具版本管理 -- flask-migrate from flask_migrate import Migrate from models import dbmigrate Migrate(sq_app, db)if __name__ __main__:sq_app.run(host sq_app.config[HOST],port sq_app.config[PORT],debug sq_app.config[DEBUG])方便开发不改变应用逻辑只是方便我们把orm映射的类这个添加的字段生效到数据库不需要自己修改数据库了。 terminal中输入该命令在命令行操控flask – flask cli (venv) D:\sq-flaskflask --app server:sq_app db init Creating directory D:\\sq-flask\\migrations ... done Creating directory D:\\sq-flask\\migrations\\versions ... done Generating D:\sq-flask\migrations\alembic.ini ... done Generating D:\sq-flask\migrations\env.py ... done Generating D:\sq-flask\migrations\README ... done Generating D:\sq-flask\migrations\script.py.mako ... done Please edit configuration/connection/logging settings in D:\\sq-flask\\migrations\\alembic.ini befor e proceeding. 然后就会产生一个migrations的文件夹 migrate单独用不了借助flask cli命令行工具migrate绑定好app后自动创建好db命令。 初始化flask --app server:sq_app db init –app 指定运行哪个app 初始化会创建migrations的文件夹 可以随时删再init做了修改提交版本 (venv) D:\sq-flaskflask --app server:sq_app db migrate -m add time INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.autogenerate.compare] Detected removed table product_kind_table INFO [alembic.autogenerate.compare] Detected added column product_info.add_time INFO [alembic.autogenerate.compare] Detected NULL on column product_info.product_name INFO [alembic.autogenerate.compare] Detected NULL on column product_info.product_kind INFO [alembic.autogenerate.compare] Detected NULL on column product_info.product_price INFO [alembic.autogenerate.compare] Detected NULL on column product_info.product_address Generating D:\衡山\2023-文老师\sq-flask\migrations\versions\43aac3b3bb51_add_time.py ... done upgrade就可以生效了 (venv) D:\sq-flaskflask --app server:sq_app db upgrade INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade - 43aac3b3bb51, add time 严格按照orm定义好的模型保持数据库和模型一致如果数据库有orm定义的模型没有则会把数据库多出来的删掉。 回退:flask --app server:sq_app db downgrade 命令行进入上下文环境(用来测试调试代码) flask --app server:sq_app shell (venv) D:\sq-flaskflask --app server:sq_app shell Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32 App: app Instance: D:\sq-flask\instancefrom models.product import ProductInfop1 ProductInfo()p1.product_name 3333p1.product_kind 2p1.product_price 22p1.product_address 山东from models import dbdb.session.add(p1)db.session.commit()查询和修改 修改其属性。 p2 ProductInfo.query.get(3)p2 ProductInfo 3dir(p2) [__abstract__, __annotations__, __class__, __delattr__, __dict__, __dir__, __doc__, __eq__, __for mat__, __fsa__, __ge__, __getattribute__, __gt__, __hash__, __init__, __init_subclass__, __le__, __lt__, __mapper__, __module__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__ , __sizeof__, __str__, __subclasshook__, __table__, __tablename__, __weakref__, _sa_class_manager, _sa_instance_state, _sa_registry, add_time, metadata, product_address, product_id, product_kind, pr oduct_name, product_price, query, query_class, registry]p2.product_name 牛肉p2.product_name 牛肌肉db.session.add(p2)db.session.commit()删除 p3 ProductInfo.query.get(4)db.session.delete(p3)db.session.commit() 综合id通过url携带参数传递完成修改和删除 删除/product/modify – PUT 删除/product/delete – DELETE router/product_view/product.py product_bp.route(/product/modify, methods[PUT]) def product_modify():# 接收客户端的传递携带的参数id request.args.get(id)p1 ProductInfo.query.get(id)if p1:# 接收客户端的传递pro_name request.json.get(proname)pro_kind request.json.get(prokind)pro_price request.json.get(proprice)pro_address request.json.get(proadd)p1.product_name pro_namep1.product_kind pro_kindp1.product_price pro_pricep1.product_address pro_addressdb.session.add(p1)db.session.commit()return generate_response(msgmodify success!)else:return generate_response(msgno such product!, code5) 修改尽管你修改一个但你提交的时候得提交全部的字段 删除 product_bp.route(/product/delete, methods[DELETE]) def product_delete():id request.args.get(id)p2 ProductInfo.query.get(id)if p2:db.session.delete(p2)db.session.commit()return generate_response(msgdelete success)else:return generate_response(msgno such product, code6)查询 query.get() 一般用来查询主键 query.all() 查询所有列表类型 ProductInfo.query.filter_by(product_kind1).all() [ProductInfo 1, ProductInfo 2] ProductInfo.query.filter(ProductInfo.product_kind 1).all() [ProductInfo 1, ProductInfo 2]
http://www.w-s-a.com/news/141769/

相关文章:

  • 证券投资网站做哪些内容滨州论坛网站建设
  • 重庆网站建设公司模板广东佛山
  • 中展建设股份有限公司网站做网站备案是什么意思
  • 石家庄网站建设接单wordpress功能小工具
  • 有没有专门做网站的网站镜像上传到域名空间
  • 网站建设中 windows买域名自己做网站
  • 设计英语宁波seo做排名
  • 奉贤网站建设上海站霸深圳几个区
  • c#做网站自已建网站
  • 成都地区网站建设网站设计类型
  • 如何做网站结构优化北京响应式网站
  • 出售源码的网站威海住房建设局网站
  • 网站建设补充报价单网站建设 技术指标
  • 做网站费用分摊入什么科目做网络网站需要三证么
  • 房屋备案查询系统官网杭州排名优化软件
  • 网站地图html网络营销的流程和方法
  • 注册好网站以后怎么做wordpress 获取插件目录下
  • 南京做网站dmooo地方网站需要什么手续
  • 网站开发合同有效期omeka wordpress对比
  • 杭州设计网站的公司广州网站改版领军企业
  • 网站备案系统苏州网站设计网站开发公司
  • 怎么样做微网站著名企业vi设计
  • 三分钟做网站网页设计心得体会100字
  • 网站建设支付宝seo建站是什么
  • 常州做网站的 武进学雷锋_做美德少年网站
  • 怎样建网站赚钱贵州seo和网络推广
  • 创建网站的工具站内seo优化
  • 网站特效 站长查询网网站
  • 百度移动端网站网站建设设计思想
  • 青岛建设官方网站南宁制作企业网站