范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

python实现从零搭建图书管理系统

  学习目标 tornado入门学习 异步服务器学习 异步数据库操作 一、虚拟环境1.1 虚拟环境的创建mkvirtualenv tornado_py3 -p python31.2 安装tornadopip install tornado1.3 虚拟环境其他的操作# 虚拟环境 mkvirtualenv  # 创建虚拟环境 rmvirtualenv  # 删除虚拟环境 workon  # 进入虚拟环境、查看所有虚拟环境 deactivate  # 退出虚拟环境  # pip pip install  # 安装依赖包 pip uninstall  # 卸载依赖包 pip list  # 查看已安装的依赖库二、搭建项目
  三、完成请求的方式# 类似django中视图 class MainHandler(tornado.web.RequestHandler):     # 得到数据     def get(self):         # 这里就是返回的内容         self.write("得到数据")     # 添加新的数据     def post(self):         self.write("添加新的数据")      # 修改数据     def put(self):         self.write("修改数据")      # 删除数据     def delete(self):         self.write("删除数据")四、设置静态文件# 程序配置 def make_app():     return tornado.web.Application([         (r"/books/", MainHandler),     ],         static_path="./static" # 配置静态文件夹路径     )五、配置模板5.1 加载模板配置def make_app(): return tornado.web.Application([     (r"/books/", MainHandler), ],     static_path="./static", # 配置静态文件夹路径     template_path = "./templates",# 配置模板路径 )5.2 定义模板            Title       

{{ show }}

5.3 渲染模板   模板内容使用render返回内容 # 类似django中视图 class MainHandler(tornado.web.RequestHandler): # 得到数据 def get(self): # 这里就是返回的内容 self.render("index.html",show="显示内容")六、加载前端给的数据6.1 加载前端给个模板文件6.2 加载前端给的前端静态资源七、数据库操作7.1 数据库初始化-- 创建数据库 create database book_manager charset=utf8; -- 使用数据库 use book_manager; -- 创建表 CREATE TABLE books(id int UNSIGNED PRIMARY KEY AUTO_INCREMENT ,btitle VARCHAR(30) not NULL ,bauthor VARCHAR(30) NOT NULL ,bperson VARCHAR(30),bpub_date DATE NOT NULL ,bread INT UNSIGNED,bcomment INT UNSIGNED); -- 插入数据 insert into books(btitle, bauthor, bperson, bpub_date, bread, bcomment) VALUES ("红楼梦","曹雪芹","宝 ","1980-5-1",12,34), (" 游记","施耐安","悟空","1986-7-24",36,50), (" 浒传","吴承恩","林冲","1995-12-24",20,80), ("三国演义","罗贯中","曹操","1980-5-1",58,24);7.2 安装pymysql   pip install pymysql 八、使用同步的方式操作数据8.1 get请求   8.1.1get请求处理 class MainHandler(tornado.web.RequestHandler): # 得到数据 # 异步方法 def get(self): # 1. 从数据库得到数据 # 1.1连接数据库 # 创建Connection连接 conn = connect(host="localhost", port=3306, database="book_manager", user="root", password="mysql", charset="utf8") # 获得Cursor对象 cs1 = conn.cursor() # 1.2 执行查询的sql语句 cs1.execute("select * from books;") # 得到数据库的数据 data = cs1.fetchall() # 1.3 关闭 cs1.close() conn.close() # 操作 #for temp in data: # print(temp) # 返回数据 self.render("index.html",show_list = data)   8.1.2模板数据展示 {% for temp in show_list%} {%end%}8.2 post请求def post(self): # 得到请求的数据 # 使用元组 params_list = list() params_list.append(self.get_argument("btitle")) params_list.append(self.get_argument("bauthor")) params_list.append(self.get_argument("bperson")) params_list.append(self.get_argument("bpub_date")) params_list.append(self.get_argument("bread")) params_list.append(self.get_argument("bcomment")) print(params_list) # 1. 从数据库得到数据 # 1.1连接数据库 # 创建Connection连接 conn = connect(host="localhost", port=3306, database="book_manager", user="root", password="mysql", charset="utf8") # 获得Cursor对象 cs1 = conn.cursor() # 1.2 执行查询的sql语句 cs1.execute("insert into books(btitle,bauthor,bperson,bpub_date,bread,bcomment) values(%s,%s,%s,%s,%s,%s)", params_list) # 得到数据库的数据 conn.commit() # 1.3 关闭 cs1.close() conn.close() self.write({"data": "success"})8.3put请求def put(self): # 得到数据 body_data = self.request.body.decode("utf-8") # 解析成字典 params_dict = json.loads(body_data) # 1. 从数据库得到数据 # 1.1连接数据库 # 创建Connection连接 conn = connect(host="localhost", port=3306, database="book_manager", user="root", password="mysql", charset="utf8") # 获得Cursor对象 cs1 = conn.cursor() # btitle, bauthor, bperson, bpub_date, bread, bcomment # 1.2 执行查询的sql语句 cs1.execute( "update books set btitle = %(btitle)s,bauthor = %(bauthor)s,bperson = %(bperson)s,bpub_date =%(bpub_date)s,bread = %(bread)s,bcomment = %(bcomment)s where id = %(id)s", params_dict ) # 得到数据库的数据 conn.commit() # 1.3 关闭 cs1.close() conn.close() self.write({"data":"success"})8.4 delete 请求def delete(self): # 得到数据 body_data = self.request.body.decode("utf-8") # 解析成字典 params_dict = json.loads(body_data) # 1. 从数据库得到数据 # 1.1连接数据库 # 创建Connection连接 conn = connect(host="localhost", port=3306, database="book_manager", user="root", password="mysql", charset="utf8") # 获得Cursor对象 cs1 = conn.cursor() # 1.2 执行查询的sql语句 cs1.execute("delete from books where id = %(id)s", params_dict) conn.commit() # 1.3 关闭 cs1.close() conn.close() self.write({"data":"success"})九、异步请求改造class MainHandler(tornado.web.RequestHandler): # 得到数据 # 异步方法 async def get(self): print("get请求") # 等待3秒 await asyncio.sleep(3) # 这里就是返回的内容 self.render("index.html",show="显示内容")十、异步10.1 安装模块pip3 install aiomysql把所有请求改成异步请求   只需要方法前加async 再耗时返回时使用await返回 class MainHandler(tornado.web.RequestHandler): # 得到数据 # 异步方法 async def get(self): # 1. 从数据库得到数据 # 1.1连接数据库 # 创建Connection连接 conn = await aiomysql.connect(host="localhost", port=3306, db="book_manager", user="root", password="mysql", charset="utf8") # 获得Cursor对象 cs1 = await conn.cursor() # 1.2 执行查询的sql语句 await cs1.execute("select * from books;") # 得到数据库的数据 data = await cs1.fetchall() # 1.3 关闭 await cs1.close() conn.close() # 操作 # for temp in data: # print(temp) self.render("index.html", show_list=data) async def post(self): # 得到请求的数据 # 使用元组 params_list = list() params_list.append(self.get_argument("btitle")) params_list.append(self.get_argument("bauthor")) params_list.append(self.get_argument("bperson")) params_list.append(self.get_argument("bpub_date")) params_list.append(self.get_argument("bread")) params_list.append(self.get_argument("bcomment")) print(params_list) # 1. 从数据库得到数据 # 1.1连接数据库 # 创建Connection连接 conn = await aiomysql.connect(host="localhost", port=3306, db="book_manager", user="root", password="mysql", charset="utf8") # 获得Cursor对象 cs1 = await conn.cursor() # 1.2 执行查询的sql语句 await cs1.execute("insert into books(btitle,bauthor,bperson,bpub_date,bread,bcomment) values(%s,%s,%s,%s,%s,%s)", params_list) # 得到数据库的数据 await conn.commit() # 1.3 关闭 await cs1.close() conn.close() self.write({"data": "success"}) async def put(self): # 得到数据 body_data = self.request.body.decode("utf-8") # 解析成字典 params_dict = json.loads(body_data) # 1. 从数据库得到数据 # 1.1连接数据库 # 创建Connection连接 conn = await aiomysql.connect(host="localhost", port=3306, db="book_manager", user="root", password="mysql", charset="utf8") # 获得Cursor对象 cs1 = await conn.cursor() # btitle, bauthor, bperson, bpub_date, bread, bcomment # 1.2 执行查询的sql语句 await cs1.execute( "update books set btitle = %(btitle)s,bauthor = %(bauthor)s,bperson = %(bperson)s,bpub_date =%(bpub_date)s,bread = %(bread)s,bcomment = %(bcomment)s where id = %(id)s", params_dict ) # 得到数据库的数据 await conn.commit() # 1.3 关闭 await cs1.close() conn.close() self.write({"data": "success"}) async def delete(self): # 得到数据 body_data = self.request.body.decode("utf-8") # 解析成字典 params_dict = json.loads(body_data) # 1. 从数据库得到数据 # 1.1连接数据库 # 创建Connection连接 conn = await aiomysql.connect(host="localhost", port=3306, db="book_manager", user="root", password="mysql", charset="utf8") # 获得Cursor对象 cs1 = await conn.cursor() # 1.2 执行查询的sql语句 await cs1.execute("delete from books where id = %(id)s", params_dict) await conn.commit() # 1.3 关闭 await cs1.close() conn.close() self.write({"data":"success"})

辣椒不要炒着吃,教你农家特色做法,锅里煮一煮,比红烧肉还解馋辣椒不要炒着吃,教你农家特色做法,锅里煮一煮,比红烧肉还解馋。辣椒是我们日常生活中经常吃的蔬菜,在生活中,很多人讲究无辣不欢,我也不例外,就很喜欢吃辣!每次在吃饭的时候,辣椒,蒜,孜然鸡丁这样做才好吃,外酥里嫩,香辣美味,比撸串还过瘾头条创作挑战赛人们常说没有什么事情是一顿美食解决不了的,如果有,那就再吃两顿,虽然说得有点夸张,但确实美食是每个人抵挡不了的。不论生活中遇到什么烦恼,美食就是人们最好的慰藉,味蕾上黑米不做饭也不熬粥,这个做法蓬松暄软又香浓,想要几层做几层大家好,我是Allie,美好的一天从营养早餐开始,吃好早餐,一整天都精力充沛。早餐吃好午餐吃饱晚餐吃少,低油低盐清淡饮食,这是我多年的习惯,希望和朋友们一起吃出健康吃出美丽吃出好身教你做传统农家干炒鸡,做法用料都简单,干香有嚼头,姜比肉还香要说有没有一道美食在全国各地都被称为当地特色美食,我想大概就是炒鸡了。炒鸡是我国的一道传统美食,从江南到塞北,从苍蝇小馆到星级酒店,你总能点到一份炒鸡。做法也是各不相同,有先炖再炒元宵佳节,别总吃大鱼大肉,推荐这道菜,营养美味,回回吃个精光天南地北大拜年元宵佳节,别总吃大鱼大肉,推荐这道家常菜,营养又美味,回回吃个精光。转眼就过了春节,小时候每年到了正月十五以后,才开始上学,基本上认为过了十五才结束春节,现在自己都长家宴准备几道美味佳肴,大人孩子都爱吃红酒焖猪蹄用料猪蹄三只葱段姜段红酒花椒宴友食用油红椒八角料酒酱油盐做法1将葱切大段。2将姜去皮后切大片。3烧热一锅水,放入事先切好的猪蹄以及葱姜段。4煮沸后捞出猪蹄。5准备好焖猪蹄元宵节家宴菜单,3口之家,4菜1汤,吉祥喜庆,好吃实惠不浪费本期导读元宵节家宴菜单,3口之家,4菜1汤,吉祥喜庆,好吃实惠不浪费农历正月十五是元宵节,又称上元节元夜灯节。正月是农历的元月,古人称夜为宵,所以称正月十五为元宵节。正月十五这一天老醋花生这样做才好吃,酸甜脆口,清爽解腻,开胃好吃又解馋头条创作挑战赛人们常说没有什么事情是一顿美食解决不了的,如果有,那就再吃两顿,虽然说得有点夸张,但确实美食是每个人抵挡不了的。不论生活中遇到什么烦恼,美食就是人们最好的慰藉,味蕾上欢天喜地闹元宵张家口桥东300多人同吃百年百家宴2月4日,张家口市桥东区大仓盖镇羊房堡村元宵百家宴民俗文化推广活动现场。2月4日,张家口市桥东区大仓盖镇羊房堡村村民在后厨和面。张家口市桥东区大仓盖镇羊房堡村村民在捏糕。张家口市桥冬天买菠菜,记住分清圆叶和尖叶,区别不小,建议了解入冬后,菠菜是时令的应季菜,鲜甜可口,营养丰富,深受大家喜爱。经常逛菜市场的朋友,细心一些的可能会发现菠菜有两种,一种是圆叶菠菜,另一种是尖叶菠菜,那么它们有什么区别呢?应该选择哪八款家宴私房菜,款款独特,款款好吃,值得大家收藏和参考天南地北大拜年八款家宴私房菜,款款独特,款款好吃,值得大家收藏和参考。小米蒸排骨1。小米淘洗干净,泡水三个小时。排骨泡洗半个小时以上,去掉血水,捞出控水,纳入盆中,加入白糖,盐,生
2023重返地球的第1艘载人飞船,龙飞船载美俄日3国航天员出征归来Crew5龙载人飞船成功溅落北京时间2023年3月12日1002(下同北京时间),搭载4名航天员的Crew5龙载人飞船成功溅落在墨西哥湾东部佛罗里达州坦帕(Tampa)海岸附近,这准备三度飞天?刘洋说如果有机会再上太空会带什么?想对新一批航天员说些什么近日全国人大代表刘洋接受记者采访回答了网友们关心的问题10年完成2次飞天任务刘洋期待再次飞天全国人大代表航天员刘洋是中国首位进入55载,400星!一起回顾中国空间事业光辉历程3月10日,我国在太原卫星发射中心使用长征四号丙运载火箭,成功将天绘六号AB星发射升空,卫星顺利进入预定轨道,发射任务获得圆满成功。这也是中国空间技术研究院研制并成功发射的第400二胎迎来的新生命是否给你的家庭带来了新的欢乐二胎以及三台为什么要开放?人口出生率下降,人口老龄化。如今,我国的人口出生率正在不断下降,而老龄化趋势也越来越严重。这两个问题都对国家发展造成了影响。虽然国家实行了全面开放二胎,但(体育)中国慢投垒球企业联赛总决赛落幕新华社广州3月12日电(记者王浩明)熊猫杯中国慢投垒球企业联赛总决赛12日在广东中山棒球小镇落下帷幕,无锡台协红翼队夺得总冠军,艾克米疣猪队和中山熊猫队分获第二三名。在当日进行的决家庭网络中的NAT到底是什么?所见所得,都很科学NAT(NetworkAddressTranslation)即网络地址转换,是一种在IP网络中将私有地址转换为公共地址的技术,通常用于家庭网络或企业网络中。在家庭硅谷银行破产影响几何?国内头部医药企业企业还是可以拿回资金每经记者林姿辰每经编辑张海妮北京时间3月11日,美国加州监管机构宣布,硅谷银行(SVB)因流动性不足与资不抵债被FDIC(美国联邦存款保险公司)接管,并开始安排后续存款偿付计划。该全国人大代表立信会计师事务所董事长朱建弟打造高质量企业信用评级体系中证网讯(记者李梦扬)中国证券报记者日前获悉,在两会期间,全国人大代表立信会计师事务所董事长朱建弟今年主要围绕企业信用评级体系建设进一步发挥税收支持实体经济发展作用等话题提出了建议崇阳职校别样庆祝国际妇女节极目新闻记者成昱勋通讯员陈国清阳春三月,春意盎然。为庆祝第113个三八国际妇女节,湖北崇阳职业技术学校工会特组织女教师,开展登山踏青。一路高歌,一路欢笑。3月8日下午,在咸宁市通山胃痉挛绞痛早知道早预防胃痉挛又称为胃痉挛绞痛,是由于胃酸分泌过多,导致胃酸逆流进入食管而引起的胃平滑肌痉挛,一般会出现在饭后的半小时到1小时后。胃绞痛的人大部分都是由于情绪过度紧张过度疲劳受到刺激,饮食身体好好不好,看看尿液就知道!屈医生教你观尿辨身体的健康程度你的身体健康程度好不好,其实我们日常低头看看自己的尿液就能知道,今天屈医生就来教你如何观察尿液得知自己身体好不好。如果说你平时的尿液是无色透明的或者是淡黄色的,不含有任何的沉淀物和