Flask入门
引子:
以前用的都是django,现在公司主要在用flask做自动化平台,所以今天开始学习flask,作为python流行的三大框架之一,flask与Django形成了鲜明的对比,一个是大而全一个是小而精,但是flask拥有丰富的第三方插件,这2个框架我感觉是2种不同的思想,django各种工具封装的特别完善比如orm,form,modelform,中间件等,所以开发速度是比较快速的,但是flask不是,但是因为各种第三方插件的加持,flask的可定制性要必django高,经过学习发现2个框架有很多相似的地方。
flask简单的入门:
与django的app不同,flask每一个py文件就是一个app
from flask import Flask
app = Flask(__name__)
# app.route 通过 route内部定义的 url_map 匹配到视图函数
# 这时候已经拿到了对象 获取到请求 则执行对象的__call__方法
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
"""
监听用户请求 如果有用户请求到来 则执行app__call__方法 也是flask 的请求入口
"""
#app.__call__
app.run()
flask实现简单的接口登陆检校:
# -*- coding: utf-8 -*-
import functools
from flask import Flask,render_template,request,redirect,session,url_for
app=Flask(__name__)
app.secret_key='yuan'
app.config["DEBUG"]=True
USERS={
1:{"name":"yuan","age":18,"gender":"man","detail":"与django 的模版语法1"},
2:{"name":"wang","age":38,"gender":"woman","detail":"与django 的模版语法2"},
3:{"name":"yuanbao","age":6,"gender":"man","detail":"与django 的模版语法3"}
}
def get_cook(func):
@functools.wraps(func)
def inner(*args,**kwargs):
user_info=session.get("user_info")
if user_info:
print(user_info)
ret=func(*args,**kwargs)
return ret
else:
return redirect("/login")
return inner
@app.route('/index',methods=["GET",])
@get_cook
def index():
# user=session.get("user_info")
# if not user:
# return redirect("/login")
return render_template("index.html",user_dict=USERS)
@app.route("/detail/<int:id>",)
def detail(id):
"""
flask 不像django 不支持正则 用这种方法来传值 也可以直接传id 不规定拿到的值类型/detail/<int:id>
:param id:
:return:
"""
user=session.get("user_info")
if not user:
"""
url_for 类似与django 路由的反向生成 url=url_for("l1",id=123)
"""
url=url_for("l1")
return redirect(url)
detail=USERS.get(id).get("detail")
return render_template("detail.html",detail=detail)
# endpoint url 别名
@app.route('/login',methods=['GET',"POST"],endpoint='l1')
def login():
if request.method == "GET":
return render_template("login.html")
elif request.method == "POST":
request_head_obj=request.query_string
request_body_obj=request.form
user=request_body_obj.get("user")
pwd = request_body_obj.get("pwd")
if user == "yu" and pwd =="123":
session["user_info"]=user
return redirect("http://www.baidu.com")
return render_template("login.html",error_msg="用户名或密码错误")
if __name__ == '__main__':
app.run()

浙公网安备 33010602011771号