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

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"})

冰箱里剩菜处理不当,易导致这种夏日高发病,对老年人尤其不利冰箱可谓是众多家庭中利用率最高的家电之一,尤其是在夏天,冰镇个西瓜,冷藏些吃不完的剩菜,都是常有之事。但你知道吗?当你吃过多冰冷饮食,没有正确用冰箱储存剩菜,有一种疾病就可能悄悄找夏天闷热没胃口,若不差钱,试试这4道家常菜,米饭都要多吃一碗马上就是七月了,这段时间的温度情况,想必大家也是知道的。连着数日都是持续高温,天气热的能把马路都晒裂,想想都觉得可怕。这天一热,对咱们的身体可是相当不好,轻则没胃口,重则头晕难受。夏天离不开芝麻酱,5元自制一大罐,细腻香浓丝滑,纯正无添加夏天离不开芝麻酱,5元自制一大罐,细腻香浓丝滑,纯正无添加芝麻酱,在北方应该是很常见了,可能对于南方人来说,吃不惯这个味道,但是绝大多数北方人,实在爱得很。涮火锅的时候,必不可少的一只591亿独角兽,杨国强豢养了30年房财经李琦最近,杨国强很恼火。国际评级机构穆迪罕见地调整了对碧桂园的评级,从高级无抵押评级调至Ba1。宇宙第一房企被评为垃圾级这个三个字很辣眼睛。碧桂园强大的公关团队,马上进行反扑孙杨纪录被打破!被禁赛51个月,仍保持世界纪录,10年无人打破6月26日,布达佩斯游泳世锦赛的游泳项目收官日,男子1500米自由泳决赛,这也是室内游泳距离最远的项目。最终意大利名将该项目里约奥运会金牌得主帕尔特里涅利获得第一名,斩获金牌,成绩被人忽略的韩国,正在被美国金融收割的国家,不单单只有日本最近关于日元贬值的话题比较火,我也有持续追踪分析。实际上,现在并不单单只有日本正在被美国金融收割。当前韩国经济的境地,比日本还要更危险,本文会来对不怎么被人关注的韩国,所存在的金融夏季出镜率最高的时尚穿搭纯棉T恤牛仔短裤炎炎夏日什么着装是你的心头好?对我来说,清凉吸汗的纯棉T恤牛仔短裤,绝对是夏日里出镜率最高的穿搭之一。纯白T恤搭配破洞牛仔短裤,百搭时尚,清爽舒适。印花T恤搭配破洞牛仔短裤,俏皮可唯有轻薄才能配得上炎炎夏日!台电P30HD图赏P30HD采用了10。1英寸FHD分辨率IPS屏幕,为600800元价位段的顶流水平。高清的屏幕显示效果搭配4830触控矩阵以及120Hz触控采样率,让其在游戏方面表现也非常出色。下半年买手机选128G256G还是512G?跟着内行人走,不会踩坑最近有不少朋友问我该买128G还是256G的手机,价格只差300500怎么选更好?我们一起来听听内行人都是怎么挑内存的?第一点上班族学生党想要用3年以上,更建议256G上班族也好还三星手机的自嗨三星手机的自嗨玩法三星手机跟大屏互动的几个玩法,话不多说,直接上货1三星dexDex是手机与大屏互动的主要玩法,开启dex时手机可以息屏。a)电脑模式电脑安装dex软件后,手机和电王者新赛季变化须重视,为何我说这两台真香手机是冲分绝佳机型?作为眼下国民度最高的手游之一,王者荣耀在近日开启了S28赛季更新。据了解,这次新赛季白嫖皮肤给到了中路法师沈梦溪,整体画风还是蛮好看的,有望借此提高该英雄的出场率。此外,新英雄戈娅
30分钟亏21万01发财美滋滋?周末的时候,看到了一个一个截图上周五下午2点12点,有一个小伙伴在众生药业吧,发了一个帖子,38。93元涨停板买入了30000股众生药业,感觉要发财了,心里美滋滋。自动驾驶技术最牛的6大公司!中国占了4个,华为第6,百度第一相信很多人开始关注自动驾驶就是从特斯拉开始的,特斯拉不仅在技术上也有许多大胆的突破,更是推动了全球自动驾驶研发的热潮。不过,单纯论自动驾驶技术来说,特斯拉已经有些保守了。在量产车上命里出现了这三种情况,说明老天爷在渡你文泠泠人这一生,会经历很多考验,这些经历其实都不是偶然,而是人生中的必然。人这辈子,该是你经历的,一件都不会少,怎么也躲不过,而不是你经历的,怎么也轮不到你。而我们人生路上会遇到很盘点近5年的妖股,特别是10倍跨年大妖股,2022年竞业达领跑12017到2018年跨年妖股贵州燃气,2017年11月7日上市,2018年3月9日,最高点26。57。特点次新低价盘子不大,3波流。(顶级游资欢乐海岸,喜闻乐见,没有大哥不敢接的儿子被开除2次转学3次,知名教授郑强的育儿故事,治好了我的焦虑小时候不听话,长大就没出息吗?孩子天天犯错爱闯祸,就没救了吗?如果你和我一样,是个焦虑的父母,一起看看这个故事吧!作者西瓜妈自从儿子上了小学,我已经记不清这是第几次被请家长了。上周中国男篮残阵为什么能战胜巴林?赵睿一番话,说得再透彻不过了中国男篮残阵为什么能战胜巴林?赵睿一番话,说得再透彻不过了全场比赛还剩最后几秒,赵睿在左边拿到球,因为中国男篮比分领先,已经锁定胜局,所以赵睿一边运球,一边东张西望,他是想把时间很中国男篮换帅在即,杜锋为继任者培养出了3大王牌,球迷不该走近期,最令中国球迷关注的球队,非中国男篮莫属。一方面,此次杜锋率领中国男篮出征世预赛,对于球队来说非常重要,能不能打世界杯,对阵伊朗和巴林的两场比赛,将成为非常关键的比赛。另一方面共享游戏主机的下一个爆款,未来光枪面市,共享游戏主机火力全开共享游戏主机作为近年来少数在线下市场让人惊喜的作品,短短一年多的时间里,共享游戏主机的体验门店就突破了两千多家。无人值守的模式成为共享游戏主机席卷全国各地商场商圈的杀手锏,但是很多家居行业胡润百富榜红星美凯龙董事长财富缩水最多近日,胡润研究院发布2022胡润百富榜,榜单显示,共1305位个人财富50亿元人民币以上的企业家上榜,比去年减少了11(160人),上榜企业家总财富为24。5万亿元人民币,比去年下小小手抓饼,如何卖出了10多个亿柴磊的故事又很非凡。因为不是每个企业家都能开创一个产业。而柴磊恰恰于平常间缔造了一个产业的传奇,从无到有,由弱到强如今巨头环伺,他依然稳步走在前行的路上。从懵懂无知,仅仅凭借朴素的兄弟姐妹翻脸之后,别做以下几件糊涂事,害人害己孟子说是君臣父子兄弟去利,怀仁义以相接也。都是一家人,舍去利益的争执,心中有仁义,啥事都好办。这是古人对我们的教导。放下古书里的智慧,看看人间的生活,你会发现,利益是很多关系存在的