首页 > 技术文章 > flask 视图基础和url

blowwind 2019-11-29 17:19 原文

FLASK介绍

一、Flask是一个用Python编写的Web应用程序框架。 它由 Armin Ronacher 开发,他领导一个名为Pocco的国际Python爱好者团队。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。

Web Server Gateway Interface(Web服务器网关接口,WSGI)已被用作Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。

Werkzeug它是一个WSGI工具包,它实现了请求,响应对象和实用函数。 这使得能够在其上构建web框架。 Flask框架使用Werkzeug作为其基础之一。

jinja2是Python的一个流行的模板引擎。Web模板系统将模板与特定数据源组合以呈现动态网页。

Flask通常被称为微框架。 它旨在保持应用程序的核心简单且可扩展。Flask没有用于数据库处理的内置抽象层,也没有形成验证支持。相反,Flask支持扩展以向应用程序添加此类功能。

 

学习链接可以参照:https://www.w3cschool.cn/flask/flask_overview.html

 

二、url 与函数映射

from flask import Flask,request,render_template

app = Flask(__name__)

#http://127.0.0.1:5001/test/?uname=zhangsan&pwd=123456
@app.route('/test/')
def hello():
  if request.method =="GET":
    uname = request.args.get("uname")
    pwd = request.args.get("pwd")
    return "请求的参数是%s,%s" % (uname,pwd)
   elif request.method=="POST":
             uname = request.form.get("uname")
             pwd = request.form.get("pwd")
            return "提交的参数是%s,%s" % (uname,pwd)

@app.route('/test/',methods=["POST","GET"])
def hello1():
  if request.method =="GET":
    uname = request.args.get("uname")
    pwd = request.args.get("pwd")
    return render_template("login.html")
  elif request.method=="POST":
    uname = request.form.get("uname")
    pwd = request.form.get("pwd")
    return "提交的参数是%s,%s" % (uname,pwd)
if __name__ == '__main__':
app.run(port = 5001)

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h4>登录页面</h4>
<form action="/test/" method="post">
用户名:<input type="text" name="uname"></br>
密 码:<input type="text" name="pwd"></br>
<input type="submit" value="提交">
</form>
</body>
</html>

 三、url_for函数使用

 from flask import Flask,request,url_for

'''
1.使用url_for函数构建url
(1)路径修改的概率高于函数
(2)ulr_for 接收两个以上参数第一个参数为函数名,第二个参数为url规则的命名参数,其余参数为可变参数
'''
app = Flask(__name__)

@app.route('/')
def hello():
  #num=1,pwd=123456为可变参数,根据需要填写
  return url_for("url",page=4,num=1,pwd=123456)

@app.route('/url/<page>/')
def url(page):
  print("路径函数")

if __name__ == '__main__':
  app.run(port = 5002)

 

四、页面跳转和重定向

from flask import Flask,render_template,redirect,request,url_for

'''
重定向:永久重定向302和暂时性重定向301
'''
app = Flask(__name__)

@app.route("/login")
def login():
return render_template("login.html")

@app.route("/priviledge")
def privelege():
uname = request.args.get("uname")
#如果个人信息存在,返回个人信息即可
if uname and uname == "zhangsan":
return "这是个人中心"
#若果没有登录则重定向到登录首页
else:
return redirect(url_for("login"),code=302)

if __name__ == "__main__":
app.run(port=5003)

 五、视图函数response

from flask import Flask,request,url_for,render_template,Response

app = Flask(__name__)
'''
视图函数可以返回以下类型的值
1.Response 对象及其子类对象
2.字符串
3.元组
'''
@app.route('/')
def hello():
#返回元组,元组的格式响应体、状态码、头部,不必须按要写三个
#return ("张三",200)

#返回字符串
#return "<html>字符串</html>"

#返回【response对象及其子类对象】类型的数据
resp = Response("返回的是一个Response对象",202)
return resp

if __name__ == '__main__':
app.run(port = 5004)

推荐阅读