Flask
mkdir HelloWorld mkdir HelloWorld/static mkdir HelloWorld/templates touch HelloWorld/server.py #在server.py中加入以下内容: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run(host='0.0.0.0',port=5000,debug=True)
4. 获取URL参数
URL参数是出现在url中的键值对,例如http://127.0.0.1:5000/?disp=3中的url参数是{'disp':3}。
'''
http://10.100.34.23:5000/?name="qiao"&age=18
'''
from flask import Flask,request app=Flask(__name__) @app.route("/") def hello_world(): print("path",request.path) #/ print("full_path",request.full_path)#?name=%22qiao%22&age=18 #列出所有的参数 #r=request.args.__str__() #return r #获取某个指定的参数 r=request.args.get("name") return r #取不到设置默认值 # r=request.args.get("name","hello") # return r # 返回list # r=request.args.getlist("age") # return str(r) if __name__=="__main__": app.run(host='0.0.0.0',port=5000,debug=True)
5. 获取POST方法传送的数据
密码不适合将数据放到URL参数中,文章数据又太多,浏览器不一定支持太长长度的URL。这时,一般使用POST方法。
使用python的requests库模拟浏览器。
import requests #将数据发送到服务端 user_info={"name":["qiao","wang"],"password":123456} r=requests.post("http://10.100.34.23:5000/register",data=user_info) print(r.text) #welcome
from flask import Flask, request app = Flask(__name__) @app.route('/') def hello_world(): return 'hello world' @app.route('/register', methods=['POST']) def register(): print(request.headers) # print(request.stream.read()) # 不要用,否则下面的form取不到数据 print(request.form) print(request.form['name']) print(request.form.get('name')) print(request.form.getlist('name')) print(request.form.get('nickname', default='little apple')) return 'welcome' if __name__ == '__main__': app.run(port=5000, debug=True)
6.处理和响应JSON数据
使用 HTTP POST 方法传到网站服务器的数据格式可以有很多种
(1)比如 name=letian&password=123这种用过&符号分割的key-value键值对格式。
(2)我们也可以用JSON格式、XML格式。相比XML的重量、规范繁琐,JSON显得非常小巧和易用。
import requests json_data = {'a': 1, 'b': 2} r = requests.post("http://127.0.0.1:5000/add", json=json_data) print(r.text)
from flask import Flask,request,Response import json app=Flask(__name__) @app.route("/") def hello_world(): return "hello wprld 6" @app.route("/add",methods=['POST']) def add(): result={"sum":request.json["a"]+request.json["b"]} res=Response(json.dumps(result),mimetype="application/json") res.headers.add("Server","python flask") return res if __name__=="__main__": app.run(host='0.0.0.0',port=5000,debug=True)
7. 上传文件
8.Restful URL
''' Restful URL 网址 网页输出结果 后台输出结果 http://10.100.34.23:5000/ hello world8 http://10.100.34.23:5000/user/ not found http://10.100.34.23:5000/user/qiao hello qiao qiao <class str> http://10.100.34.23:5000/user/qiao/friends hello friends qiao qiao <class str> ''' from flask import Flask app=Flask(__name__) @app.route("/") def hello_wordl(): return "hello world8" @app.route("/user/<username>") #/user/qiao def user(username): print(username) #qiao print(type(username)) #<class str> return "hello"+username @app.route("/user/<username>/friends") #/user/qiao/friends def user_friends(username): print(username) print(type(username)) return "hello friends " + username if __name__=="__main__": app.run(host="0.0.0.0",port=5000,debug=True)
9. 使用url_for生成链接
''' url_for可以让你以软编码的形式生成url 报错 http://10.100.34.23:5000/user/qiao http://10.100.34.23:5000/page/34 正确 http://10.100.34.23:5000/ http://10.100.34.23:5000/test ''' from flask import Flask,url_for app=Flask(__name__) @app.route("/") def hello_world(): return "hello world 9" @app.route("/user/<name>") def user(name): pass @app.route("/page/<int:num>") def page(num): pass @app.route("/test") def test(): print(url_for("hello_world")) #/ print(url_for("user",name="qiao")) # / user / qiao print(url_for("page",num=1,q="haddop mapreduce 10%3")) #/ page / 1?q = haddop + mapreduce + 10 % 253 print(url_for("static",filename="uploads/01.jpg")) #/static/uploads/01.jpg return "hello" if __name__=="__main__": app.run(host="0.0.0.0",port=5000,debug=True)
10.使用redirect重定向网址
''' redirect函数用于重定向 this is test1 10.77.4.217 - - [19/Mar/2020 14:57:58] "GET /test1 HTTP/1.1" 302 - this is test2 10.77.4.217 - - [19/Mar/2020 14:57:58] "GET /test2 HTTP/1.1" 200 - ''' from flask import Flask,url_for,redirect app=Flask(__name__) @app.route("/") def hello_world(): return "hello world 10" @app.route("/test1") def test1(): print("this is test1") return redirect(url_for("test2")) @app.route("/test2") def test2(): print("this is test2") return "this is test2" if __name__=="__main__": app.run(host="0.0.0.0",port=5000,debug=True)
11. 使用Jinja2模板引擎
<html> <head> <title> {% if page_title %} {{page_title}} {% endif %} </title> </head> <body> {% for key in user_info %} {{key}} :{{user_info[key]}} {% endfor %} </body> </html>
''' Jinja2模板引擎 ''' from flask import Flask,render_template app=Flask(__name__) @app.route("/") def hello_world(): return "hello world 11" @app.route("/user") def user(): user_info={ "name":"qiao", "email":"12345@qq.com", "age":18, "salary":5000 } #render_template()函数的第一个参数指定模板文件,后面的参数是要传递的数据。 return render_template("user_info.html",page_title="qiao info",user_info=user_info) if __name__=="__main__": app.run(host="0.0.0.0",port=5000,debug=True)
12. 自定义404等错误的响应
from flask import Flask,render_template_string,abort app=Flask(__name__) @app.route("/") def hello_world(): return "hello world 12" @app.route("/user") def user(): abort(401) @app.errorhandler(401) def page_unauthorized(error): return render_template_string("<h1> Unauthorized </h1><h2>{{ error_info }}</h2>",error_info=error),401 if __name__=="__main__": app.run(host="0.0.0.0",port=5000,debug=True)
13. session
''' session用来记录用户的登录状态,一般基于cookie实现 /login中将向用户展示一个表单,要求输入一个名字,submit后将数据以post的方式传递给/do_login /do_login将名字存放在session中。 用户成功登录,访问/show时会显示用户的名字 /logout用于登出,通过将session中的user_name字段pop即可 ''' from flask import Flask,render_template_string,session,request,redirect,url_for app=Flask(__name__) #session加密 app.secret_key="some_secret" @app.route("/") def hello_world(): return "hello world 13" @app.route("/login") def login(): page=''' <form action="{{url_for("do_login")}}" method="post"> <p>name:<input type="text" name=""user_name/></p> <input type="submit" value="Submit"/> </form> ''' return render_template_string(page) @app.route("/do_login",methods=["POST"]) def do_login(): name=request.form.get("user_name") print("name",name) session["user_name"]=name print("do_login",session["user_name"]) return "success" @app.route("/show") def show(): print("show",session["user_name"]) return session["user_name"] @app.route("/logout") def logout(): session.pop("user_name",None) return redirect(url_for("login")) if __name__=="__main__": app.run(host="0.0.0.0",port=5000,debug=True)
14. Cookie
''' Cookie是存储在客户端的记录访问者状态的数据 ''' from flask import Flask,request,Response,make_response import time app=Flask(__name__) @app.route("/") def hello_world(): return "hello world 14" @app.route("/add") def login(): res=Response("add cookies") res.set_cookie(key="name",value="qiao",expires=time.time()+6*60) return res @app.route("/show") def show(): return request.cookies.__str__() #{'name': 'qiao'} @app.route("/del") def del_cookie(): res=Response("delete cookies") res.set_cookie("name","",expires=0) return res if __name__=="__main__": app.run(host="0.0.0.0",port=5000,debug=True)
15.闪存系统 flashing system
from flask import Flask,flash,get_flashed_messages import time app=Flask(__name__) app.secret_key="some_secret" @app.route("/") def index(): return "hi" @app.route("/gen") def gen(): info="access at "+time.time().__str__() flash("show1 "+info,category="show1") flash("show2 "+info,category="show2") return info @app.route("/show1") def show1(): return get_flashed_messages(category_filter="show1").__str__() @app.route("/show2") def show2(): return get_flashed_messages(category_filter="show2").__str__() if __name__=="__main__": app.run(host="0.0.0.0",port=5000,debug=True) ''' http://10.100.34.23:5000/gen access at 1584673777.654382 seesion .eJyrVopPy0kszkgtVrKKrlZSKAFSSsUZ-eWGSjoQWiExOTm1uFghsUTB0NTCxMzc2MzEXM_E1MzEwtRYKbZWB1mXEVSXESFdsbUAu5EjDA.EVXE7w.r7TWpR-K6irS_dA6GTKjCpHAlJY http://10.100.34.23:5000/show1 ['show1 access at 1584673777.654382'] session null http://10.100.34.23:5000/show2 [] session null '''
posted on 2020-03-20 16:10 happygril3 阅读(150) 评论(0) 收藏 举报
浙公网安备 33010602011771号