1. flask框架应用实例

get方法

服务器端 server.py 如下

  1. import flask
  2. app=flask.Flask(_name_)
  3. //启动一个应用程序
  4.  
  5. @app.rout("/")
    //路由的作用
  6. def hello():
    //定义一个函数
  7. try:
  8. province=flask.request.args.get("province") if "province" in flask.request.args else ""
  9. city=flask.request.args.get("city") if "city" in flask.request.args else ""
  10. return province+","+city
  11. except Exception as err:
  12. return str(err)
  13.  
  14. @app.rout("/hi")
  15. def hello():
  16. return hello
  17.  
  18. if _name_=="_main_":
  19. app.run()

 flask可以显示静态网页

客户端 client.py如下

  1. import urllib.parse
  2. import urllib.request
  3.  
  4. //浏览器访问
  5. url="http://127.0.0.1:5000"
  6. try:
    //汉字编码为十六进制
  7. province=urllib.parse.quote("广东")
  8. city=urllib.parse.quote("深圳")
  9. data="province="+province+"&city="+city
    //向服务器端发送,并将服务器返回结果存储在html中
  10. html=urllib.request.urlopen("http://127.0.0.1:5000?"+data)
  11. html=html.read()
  12. html=html.decode()
  13. print(html)
  14. except Exception as err
  15. print(err)

post方法

服务器端 server.py 如下

  1. import flask
  2. @app.route("/",methods=["post"])
  3. def index():
  4. try:
  5. province=flask.request.form.get("province") if "province" in flask.request.form else ""
  6. city=flask.request.form.get("city") if "city" in flask.request.form else ""
  7. return province+","+city
  8. except Exceptioin as err:
  9. return str(err)
  10. if _name_=="_main_":
  11. app.run()

客户端client.py如下

  1. import urllib.parse
  2. import urllib.request
  3. url="http://127.0.0.1:5000"
  4. try:
  5. province=urllib.parse.quote("广东")
  6. city=urllib.parse.quote("深圳")
  7. data="province="+province+"&city="+city
  8. data=data.encode()
  9. html=urllib.request.urlopen("http://127.0.0.1:5000",data=data)
  10. html=html.read()
  11. html=html.decode()
  12. print(html)
  13. except Exception as err:
  14. print(err)

混合

服务器端代码

  1. import flask
  2. app.flask.Flask(_name_)
  3. @app.route("/",methods=["GET","POST"])
  4. def index():
  5. try:
  6. provice=flask.request.args.get("province") if "province" in flask.request.args else ""
  7. city=flask.request.args.get("city") if "city" in flask.request.args else ""
  8. note=flask.request.args.form.get("note") if "note" in flask.request.form else ""
  9. return province+","+city+"\n"+note
  10. except Exception as err:
  11. return str(err)
  12.  
  13. if _name_=="_main_":
  14. app.run()

也可以

  1. import flask
  2. app.flask.Flask(_name_)
  3. @app.route("/",methods=["GET","POST"])
  4. def index():
  5. try:
  6. provice=flask.request.values.get("province") if "province" in flask.request.values else ""
  7. city=flask.request.values.get("city") if "city" in flask.request.values else ""
  8. note=flask.request.values.get("note") if "note" in flask.request.values else ""
  9. return province+","+city+"\n"+note
  10. except Exception as err:
  11. return str(err)
  12.  
  13. if _name_=="_main_":
  14. app.run()

客户端代码

  1. import urllib.parse
  2. import urllib.request
  3. url="http://127.0.0.1:5000"
  4. note="深圳依山傍海,气候宜人,...."
  5. try:
  6. provice=urllib.parse.quote("广东")
  7. city=urllib.parse.quote(note)
  8. param="province="+province+"&city="+city
  9. html=urllib.request.urlopen("http://127.0.0.1:5000?"+param,data=note.encode())
  10. html=html.read()
  11. html=html.decode()
  12. print(html)
  13. except Exception as err:
  14. print(err)

flask默认服务器端口号 5000

浏览器访问

http://127.0.0.1:5000

web文件下载

服务器端代码

  1. import flask
  2. import os
  3. app=flask.Flask(_name_)
  4. @app.route("/")
  5. def index():
  6. if not "fileName" in flask.request.values:
  7. s="图像.jpg"
  8. return s
  9. else
  10. fileName=request.values.get("fileName")
  11. f=open(fileName,"rb")
  12. data=f.read()
  13. f.close()
  14. return data
  15. app.run()

客户端代码

  1. import urllib.parse
  2. import urllib.request
  3. url="http://127.0.0.1:5000"
  4. resp=urllib.request.urlopen(url)
  5. data=resp.read()
  6. fileName=data.decode()
  7. data=urllib.request.urlopen(url+"?fileName="+urllib.parse.quote(fileName))
  8. data=data.read()
  9. fobj=open("download"+fileName,"Wb")
  10. fobj.write(data)
  11. fobj.close()
  12. print(fileNamelen(data))
  13. except Exception as err:
  14. print(err)

web文件上传

服务器端代码

  1. import flask
  2. import os
  3. app=flask.Flask(_name_)
  4. @app.route("/upload",methods=["POST"])
  5. def uploadFile():
  6. msg=""
  7. try:
  8. if "fileName" in flask.request.values:
  9. fileName=flask.request.values.get("fileName")
  10. data=flask.request.get_data()
  11. fobj=open("unload"+fileName,"wb")
  12. fobj.write(data)
  13. fobj.close()
  14. msg="OK"
  15. else:
  16. msg="没有按要求上传文件"
  17. except Exception as err:
  18. print(err)
  19. msg=str(err)
  20. return msg

客户端代码

  1. import urllib request
  2. import os
  3. url="http://127.0.0.1:5000/upload"
  4. fileName="《Phython web程序开发技术》教材.pdf"
  5. try:
  6. fobj=open(fileName,"rb")
  7. data=fobj.read()
  8. fobj.close()
  9. headers={'content-type': 'application/octet-stream'}
  10. url=url+"?fileName="+urllib.parse.quote(fileName)
  11. req=urllib.request.Request(url,data,headers)
  12. resp=urllib.request.urlopen(req)
  13. msg=resp.read().decode()
  14. print(msg)
  15. except Exceptioin as e:
  16. print(e)

与数据交互

首先服务器端与客户端形成约定,

并,在Sqlite数据库中,创建表,

建立维护一个Sqllite的学生库Students.db中的学生记录表
creat table students(
No varchar(16) primary key,
Name varchar(16),
Sex varchar(8)
Age int);

服务器端代码

  1. import flask
  2. import sqlite3
  3. import jspn
  4. app=flask.Flask(_name_)

  5. //通过类StudentDB打开Sqlit3数据库红students.db
    class StudentDB:
  6. def openDB(self)
    //连接数据库
  7. self.con=sqlit3.connect("students.db")
    //获取游标
  8. self.cursor=self.con.cursor()
  9. def closeDB(self):
    //数据库提交
  10. self.con.commit()
    //数据库连接关闭
  11. self.con.close()
  12.  
  13. def initTable(self):
  14. res={}
  15. try:
  16. self.cursor.execute("create table students(
  17. No varchar(16) primary key,Name varchar(16),
  18. Sex varchar(8),Age int)")
  19. res["msg"]="OK"
  20. except Exception as err:
  21. res["msg"]=str(err)
  22. return res
  23.  
  24. def insertRow(self,No,Name,Sex,Age):
  25. res={}
  26. try:
  27. self.cursor.execute("insert students(No,Name,Sex,Age) values(?,?,?,?)" values(No,Name,Sex,Age))
  28. res["msg"]="OK"
  29. except Exception as err:
  30. res["msg"]=str(errd)
  31.  
  32. def deleteRow(self.No):
  33. res={}
  34. try:
  35. self.cursor.execute("delete from students where No=?",(No,))
  36. res["msg"]="OK"
  37. except Exception as err:
  38. res["msg"]=str(err)
  39. return res
  40.  
  41. def selectRows(self):
  42. res={}
  43. try:
  44. data=[]
  45. self.cursor.execute("select * from students order by No")
  46. rows.self.cursor.fetchall()
  47. for row in rows:
  48. d={}
  49. d["No"]=row[0]
  50. d["Name"]=row[1]
  51. d["Sex"]=row[2]
  52. d["Age"]=row[3]
  53. data.append(d)
  54. res["msg"]="ok"
  55. res["data"]=data
  56. execept Exception as err:
  57. res["msg"]=str(err)
  58. return res
  59.  
  60. @app.route("/",methods=["GET","POST"])
  61. def process():
  62. opt=flask.request.values.get("opt") if "opt" in flask.request.values else ""
  63. res={}
  64. db=StudentDB()
  65. db.openDB()
  66. if opt=="init" :
  67. res=db.initTable()
  68. elif opt=="insert":
  69. No=flask.request.values.get("No") if "No" in flask.request.values else ""
  70. Name=flask.request.values.get("Name") if "No" in flask.request.values else ""
  71. Sex=flask.request.values.get("Sex") if "Sex" in flask.request.values else ""
  72. Age=flask.request.values.get("Age") if "No" in flask.request.values else ""
  73. res=db.insertRow(No,Name,Sex,Age)
  74. elif opt=="delete":
  75. No=flask.request.values.get("No") if No in flask.request.values else ""
  76. res=db.deleteRow(No)
  77. else:
  78. res=db.closeDB()
  79. return json.dumps(res)
  80.  
  81. if _name_=="_main_"
  82. app.run()

客户端代码

  1. import urllib.request
  2. import json
  3. class Student:
  4.  
  5. def _init_(self,No,Name,Sex,Age):
  6. self.NO=No
  7. self.Name=Name
  8. self.Sex=sex
  9. self.Age=age
  10.  
  11. def.show(self)
  12. print("%-16s%-16s%-8s%-4d"%(self.No,self.Name,self.Sex,self.Age))
  13. students=[]
  14. url="http://127.0.0.1:5000"
  15.  
  16. def listStudents():
  17. global students
  18. print("%-16s%-16s%-8s%-4d"%(self.No,self.Name,self.Sex,self.Age))
  19. for s in students:
  20. s.show()
  21.  
  22. def insertStudent(s)
  23. global students
  24. i=0
  25. while(i<len(students)and s.No>students[i].No):
  26. i=i+1
  27. if(i<len(students) and s.No==students[i].No):
  28. print(s.No+"already exists")
  29. return False
  30. students.insert(i,s)
  31. return True
  32.  
  33. def deleteRow():
  34. global students
  35. No=input("No=")
  36. if(No!=""):
  37. for i in range(len(students)):
  38. if(students[i].No==No):
  39. st=""
  40. try:
  41. st="No="+urllib.request.quote(No)
  42. st=st.encode()
  43. content=urllib.request.urlopen(url+"?opt=delete",st)
  44. st=content.readline()
  45. st=json.loads(st.decode)
  46. st=st["msg"]
  47. except Exception as exp:
  48. st=str(exp)
  49. if(st=="OK")
  50. del students[i]
  51. print("删除成功")
  52. else:
  53. print(st)
  54. break
  55.  
  56. def insertRow():
  57. No =input("No=")
  58. Name=input("Name=")
  59. while True:
  60. Sex=input("Sex=")
  61. if(Sex=="男" or Sex=="女"):
  62. break
  63. else:
  64. print("Sex is not valid")
  65. Age = input("Age=")
  66. if(Age==""):
  67. Age=0
  68. else:
  69. Age=int(Age)
  70. if(Age<120 and Age>0):
  71. break
  72. else :
  73. print("Age is go wrong")
  74. if (No!="" and Name !=""):
  75. s=Student(No,Name,Sex,Age)
  76. for x in students:
  77. if(x.No==No)
  78. print(No+"already exists")
  79. return
  80. st=""
  81. try:
  82. st="No="+urllib.request.quote(No)+"&Name="+urllib.request.quote(Name)+"&Sex="+urllib.request.quote(Sex)+"&Age="+str(Age)
  83. st=st.encode()
  84. content=urllib.request.urlopen(url+"?opt=insert",st)
  85. st=content.read()
  86. st=json.loads(st.decode)
  87. st=st["msg"]
  88. except Exception as exp:
  89. st=str(exp)
  90. if(st=="OK"):
  91. inserStudents(s)
  92. print("增加成功")
  93. else:
  94. print(st)
  95. else:
  96. print("学号,姓名不能为空")
  97.  
  98. def readStudents():
  99. global students
  100. try:
  101. students.clear()
  102. content=urllib.request.urlopen(url)
  103. data=b""
  104. while True:
  105. buf=content.read(1024)
  106. if(len(buf)>0):
  107. data=data+buf
  108. else:
  109. break
  110. data=data.decode()
  111. data=json.loads(data)
  112. if(data["msg"]=="OK"):
  113. data=data["data"]
  114. for d in data
  115. #each d is a dictionary
  116. s=Student(d["No"],d["Name"]),d["Sex"],d["Age"])
  117. students.append(s)
  118. except Exception as exp:
  119. print(exp)
    try:
    readStudents()
    while True:
    print("")
    print("学生名单")
    print("0.初始化学生列表")
  1. print("1.查看化学生列表")
  1. print("2.增加学生列表")
  1. print("3.删除学生列表")
  2.  
  3. print("4 退出程序")
  4.  
  5. s=input("请选择(0,1,2,3,4)")
  6.  
  7. if(s=="0"):
    initialize()
    elif(s=="1")
    listStudents()
    elif(s=="2")
    insertRow()
    elif(s=="3")
    deleteRow()
    elif(s=="4")
    break
    except Exception as exp:
    print(exp)

Pycharm中flask框架应用的更多相关文章

  1. (3)PyCharm中Flask工程逆向生成数据库表

    一.创建数据库 在mysql数据库中创建名为"movie"的数据库. 二.安装SQLAlchemy 三.安装PyMySQL 四.创建数据模型 在app/models.py中编写数据 ...

  2. Python中Flask框架SQLALCHEMY_ECHO设置

    在用配置类的方式给app设置配置时, SQLALCHEMY_ECHO 这个是记录打印SQL语句用于调试的, 一般设置为False, 不然会在控制台输出一大堆的东西 /home/python/.virt ...

  3. Flask 框架入门

    Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, We ...

  4. Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块

    Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...

  5. Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架

    今天学习了python flask框架的安装过程以及使用案例,感觉网上讲的东西都没有从我们这种初学者的角度去考虑(哈哈),最后还是奉上心得: 1.安装virtualenv $ sudo apt-get ...

  6. 真正搞明白Python中Django和Flask框架的区别

    在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应 ...

  7. 测试开发中Django和Flask框架

    Python测试开发中Django和Flask框架 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用.系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后 ...

  8. Python中三大框架各自的应用场景(DJango,flask,Tornado)

    django:主要是用来搞快速开发的,他的亮点就是快速开发,节约成本,正常的并发量不过10000,如果要实现高并发的话,就要对django进行二次开发,比如把整个笨重的框架给拆掉,自己写socket实 ...

  9. Flask框架基础--第一篇

    1.flask框架和其他几种框架的优缺点对比 Django : 优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架 缺点 - 大到浪费资源,请求的时候需要的资源较高 Flask : ...

随机推荐

  1. 第九篇——Struts2的拦截器

    拦截器: Struts2大多数核心功能都是通过拦截器实现的,每个拦截器完成某项功能: 拦截器方法在Action执行之前或之后执行. 工作原理: 拦截器的执行过程是一个递归的过程 action请求--& ...

  2. percona-toolkit工具的使用

    percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等 percona-toolkit 源自 Maatkit 和 ...

  3. Java 创建文本内容

    Java 创建文本内容 import java.io.FileWriter; import java.io.IOException; public class TestFile { public st ...

  4. Linux 组管理、权限

    权限说明 1. 组涉及到两个配置文件,组文件/etc/group,组密码管理员/etc/gshadow/,GID500往后的算普通组. 2.主组与附属组,当创建一个用户,没有制定,用户会默认创建一个与 ...

  5. selenium+java利用AutoIT实现文件上传

    转自https://www.cnblogs.com/yunman/p/7112882.html?utm_source=itdadao&utm_medium=referral 1.AutoIT介 ...

  6. P3829 [SHOI2012]信用卡凸包

    思路 注意到结果就是每个信用卡边上的四个圆心的凸包周长+一个圆的周长 然后就好做了 注意平行时把距离小的排在前面,栈中至少要有1个元素(top>1),凸包中如果存在叉积为0的点也要pop,否则可 ...

  7. BZOJ 4480 [JSOI2013] 快乐的jyy

    思路 两个字符串都插入回文自动机中(每次重置last) 最后统计两个right集合的大小就好了 代码 #include <cstdio> #include <algorithm> ...

  8. 编码原则 之 Separation of Concerns

    相关链接: Separation of Concerns 原文 The Art of Separation of Concerns Introduction In software engineeri ...

  9. HDU 1043 Eight(八数码)

    HDU 1043 Eight(八数码) 00 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)   Problem Descr ...

  10. 关系数据库、NoSQL和NewSQL数据库产品分类