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()

  

 

posted @ 2021-01-31 20:50  Yuan_x  阅读(50)  评论(0编辑  收藏  举报