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)    收藏  举报

导航