zoukankan      html  css  js  c++  java
  • flask之jinja2模板语言

    一、jinja2简单介绍

    Jinja2是Python里一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能,这对大多应用的安全性来说是非常重要的。

    他基于unicode并能在python2.4之后的版本运行,包括python3。

    二、Django和Flask的比较

    Django web框架:

    优点:大而全,Forms组件,Admin,model ......
    缺点:浪费资源,运行一个小型程序也会启动很多组件

    Flask Web框架:
    优点:短小精悍,session(存放在cookies里,f12可以查看),三方组件强大
    缺点:运行稳定性较差

    三、启动一个flask项目

    三行代码:=》没有页面,但是已经启动了
      from flask import Flask
      app = Flask(__name__)
      app.run(debug = True)   里面的参数debug=True 是设置修改参数后项目自动重新启动。 debug级别比较低,修改一个字符项目都会重新启动。

    六行视图函数
    @app.route("/index") # 路由
    def index(): # 视图函数
    return "Hello OldBoy EDU" # Django HttpResponse

    补充个小知识点:关于创建flask项目的模板文件创建

      新建一个模板文件,右击MARK_directory as ==》选择template folder==》上方选择template language==》选择jinja2,下方选择html

    四、返回给页面的三种形式

    response三剑客:
    ① 相当于httpresponse: return "hello"
    jsonify({k:v}) 直接转换成json字符串 取代json.dumps()  注意:这里是jsonify,不是jsonfy,有个i。

    render_template :
    先导入再 return
    templates 是模板的默认存放路径

    redirect:
    先导入再 return redirect("/login")

    send_file():
    先导入再 return send_file(打开文件并返回)  括号里参数是文件路径

    五、request请求的一些数据获取

    request:
    args 获取url地址当中的参数  比如request.args.get('id')获取id的值
    form POST请求体中的FormData中的数据
    values 获取所有参数(url,formdata)
    request.data content-type:jin   b"{username:jinwangba}"
    request.json content-type:application/json 将数据序列化字典中
    request.files 获取Formdata中的文件
    jwbdf = request.files["jinwangbadefile"]
    jwbdf.save(jwbdf.filename)

    属性类的:
    method 请求方式
    url 完整地址
    host 前半段儿 http://111.111.111.111:5000/
    path 后半段儿 /login

    六、模板语言:
    Jinja2
    {{ }} 非逻辑代码
    {% %} 逻辑代码    又称为标签语法,函数,if,for都可以写入

    路由:
    methods=["POST","GET"]
    endpoint="反向url地址"
    url_for("反向url地址")
    defaults={"nid":10}
    动态路由参数/index/<int:arg>
    url_for("endpoint",arg=123)


    Flask的配置
    1.Flask实例化配置
    static_folder = 'static', # 静态文件目录的路径 默认当前项目中的static目录
    static_url_path = None, # 静态文件目录的url路径 默认不写是与static_folder同名,远程静态文件时复用   访问url的时候需要填写的路径
    template_folder = 'templates' # template模板目录, 默认当前项目中的 templates 目录


    2.Flask对象配置
    'SECRET_KEY': None, # 之前遇到过,在启用Session的时候,一定要有它
    'SESSION_COOKIE_NAME': 'session', # 在cookies中存放session加密字符串的名字
    'JSONIFY_MIMETYPE': 'application/json'

    class FlaskConfigDebug(object):
    DEBUG = True   和app.run(debug=True)是一样的
    SECRET_KEY = "DragonFire"


    class FlaskConfigTesting(object):
    TESTING = True
    SECRET_KEY = "DragonFire"

    app.config.from_object(FlaskConfigDebug)


    Flask蓝图(Blueprint)
    蓝图就是另一种形式的Flask实例
    detail_blueprint = Blueprint("serv",__name__, template_folder="serv_temp",
    static_folder="serv_static",
    static_url_path="/serv_static",url_prefix="/servs")



    Flask特殊装饰
    @app.template_folder() 类偏函数的方法
    @app.template_global() 全局函数
    @app.errorhandler(405)
    def my_405(args)

    @app.before_request
    def be1():
    return None 是继续
    return not None 是中断

    @app.after_request
    def af1(res):
    return res

    # be1 - be2 - af2 - af1
    # be1 - af2 - af1


    Flask中的session
    app.config["SECRET_KEY"] = "asdfasdfasdf"


    Flask中的 CBV
    class Login(views.MethodView):
    def get(self):
    return render_template("template.html")

    def post(self):
    username = request.form.get("username")
    password = request.form.get("password")
    if username == "yinwangba" and password == "jinwangba":
    return "登录成功"

    return render_template("template.html",msg="登录失败滚吧")

    app.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"))

    自己练习:
    基于session + Blueprint 实现一个学生管理 增删改查分别是四个蓝图

  • 相关阅读:
    五、nginx 配置实例-负载均衡
    四、nginx配置实例-反向代理
    三、nginx配置文件
    二、Nginx 安装
    十二、rpm包的管理
    十一、进程管理
    十、Linux磁盘分区、挂载
    九、定时任务调度
    八、组管理和权限管理
    七、实用指令
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9873451.html
Copyright © 2011-2022 走看看