web开发框架Flask学习二
jinja2模板规范
        在当前项目中创建一个文件为templates的文件夹,将其设置为模板文件夹,新建的html为模板页面,
        在视图函数中使用render_template(".html的文件", my_list=mylist),my_list作为在模板页面使用的的变量 {{ my_list}}
        
        过滤器 符号 "|" 管道左边作为输入传一个变量到管道右边进行输出
            safe 对字符串的html标签的代码进行解析,并以html显示在当前文件
            reverse    翻转
            upper      大写
            lower      小写等
            
        自定义过滤器(本身相当于一个函数)
            @app.template_filter("valreverse")     #将其添加到过滤器组中  
            def add_after(value):
                value += "Hello world"
                result = "¥" + value + "&&"
                return result        
            
        模板中的for和if
       loop.index    # 获取下标为0的数据
        loop。index0  # 获取下标为1的数据
            {% for ret in result %}
          # 获取下标索引为0的数据
                {% if loop.index == 1 %}
                <li style="background-color: red">{{ ret.data }}</li>
                alert({{ ret.data }})
                {% elif loop.index == 2 %}
                <li style="background-color: green">{{ ret.data }}</li>
                {% elif loop.index == 3 %}
                <li style="background-color: fuchsia">{{ ret.data }}</li>
                {% else %}
                <li style="background-color: cyan">{{ ret.data }}</li>
                {% endif  %}
            {% endfor %}
    
        模板代码的复用
            宏
                {% macro func_macro() %}
                    // 这里填想要封装的html代码
                {%endmacro %}
                
                {% import html模板 %} 导入到其他模块中使用 
          该模板中含有func_macro函数
            继承
                导入模板文件
          // 继承基类中的html代码
                {%  "extends base_index_detail.html"  %}
                    
                // 以下代码是进行挖坑和填坑的操作
                {%  block titleBloock %}
                    // 自己独有的代码块
                {%  endblock %}
                
            包含
                include()
                ignore missing   // 忽略错误的
        模板中特有的变量和函数
            在py文件中和模板文件中都可以直接拿来使用,不需要传参
            request 
            session
            g
            config
            url_for()
            get_flashed_messages() 与 flash搭配使用
       
       代码如下:
            
            @app.route("/login")
            def login():
                g.name = "xiaoming"
                session["username"] = "zhangsan"
                flash("哈哈哈")
                flash("嘻嘻嘻")
                flash("呵呵呵")
                return render_template("demo_unique.html")
            
            html模板中的内容为:
                config:
                {{ config.DEBUG }} <br>
                session:
                {{ session["username"] }}<br>
                request:
                {{ request.url }}<br>
                g变量:
                {{ g.name }} <br>
                两个函数为:
                <a href="{{ url_for('index') }}">回到首页</a><br/>
                flash结果为:
                {% for data in get_flashed_messages() %}
                {{ data }}
                {% endfor %}
            
        flask_wtf表单
            pip install  flask_wtf
            
            原生的form表单和用类生成的对象,再用对象去创建这个表单
            Web 表单是 Web 应用程序的基本功能
            它是HTML页面中负责数据采集的部件,表单有三个部分组成:表单标签、表单域、表单按钮,
            表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器
            
        CSRF 跨站请求伪造
       flask_wtf中有个generate_csrf 会自动生成CSRF
            CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造
            
            CSRF攻击
                CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求
                
                包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......
                造成的问题:个人隐私泄露以及财产安全
                
            开启CSRF验证
                app.config['WTF_CSRF_ENABLED'] = True
                
            防止CSRF攻击
                在客户端向后端请求界面数据的时候,后端会往响应中的 cookie 中设置 csrf_token 的值在 Form 表单中添加一个隐藏的的字段,值也是 csrf_token,
 
           在form表单中设置csrf
              <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
                在用户点击提交的时候,会带上这两个值向后台发起请求
                后端接受到请求,以会以下几件事件:
                从 cookie中取出 csrf_token从表单数据中取出来隐藏的 csrf_token 的值进行对比如果比较之后两值一样,那么代表是正常的请求,
          如果没取到或者比较不一样,代表不是正常的请求,不执行下一步操作
  
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
                    更多精彩
		
													
													
													
													
	
		
