zoukankan      html  css  js  c++  java
  • Flask:重定向;模板语法,

    一.永久重定向和临时重定向

    链接:https://www.cnblogs.com/xiaoyuanqujing/articles/11644024.html

    1.原理详解

    例1:访问淘宝的时候,你选择了已经购买的商品,但是你并没有登录过淘宝,那么这个时候如果只是提示 “请登录再访问!”,那么相信这种设计是留不住用户的,不如直接为用户重定向到登录页面。

    例2:比如想废弃原本的网址,那么用户并不知道这个事情,所以用户还是会访问原来的网址,那么就会内部做一个重定向到新启用的网址,重定向的过程会有状态码的返回,搜索引擎捕捉到重定向的代码,有利于搜索引擎优化。

    关键词:重定向在设计上会提升用户体验 ,有利于搜索引擎优化

    2.代码实现

    #1. 暂时性重定向(代码实例)

    from flask import Flask,redirect
    ...
    @app.route('/user_info/')
    def user_info():
        name = request.args.get('name')
        pwd = request.args.get('pwd')
        if name=='mark' and pwd == '123':
            return '{}的信息'.format(name)
        return redirect('/login/')  # 可以换成 return redirect(url_for('login'))
    
    
    @app.route('/login/')
    def login():
        return '这是登录页面'
    ...

    #2.永久重定向

    from flask import Flask,redirect
    ...
    @app.route('/user_info/')
    def user_info():
        name = request.args.get('name')
        pwd = request.args.get('pwd')
        if name=='mark' and pwd == '123':
            return '{}的信息'.format(name)
       return redirect('/login/', code=301)  # 会返回301状态码给浏览器 
    
    
    @app.route('/login/')
    def login():
        return '这是登录页面'
    ...
    关键词:永久性重定向只给redirect('/login/', code=301)多加了个code=301参数

    二 模板语法

    #1.for 循环

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>用户列表</h1>
        <table>
            {% for k,v in user_dict.items() %}
            <tr>
                <td>{{k}}</td>
                <td>{{v.name}}</td>
                <td>{{v['name']}}</td>
                <td>{{v.get('name')}}</td>
                <td><a href="/detail/{{k}}">查看详细</a></td>
            </tr>
            {% endfor %}
        </table>
    </body>
    </html>

    #2.if逻辑

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>用户列表</h1>
        <table>
            {% if name %}
              <h1>Hello {{ name }}!</h1>
            {% else %}
              <h1>Hello World!</h1>
            {% endif %}
        </table>
    </body>
    </html>

    #3.前台使用后台函数

    后台:
    def func1(st,st1):
        return Markup(f"<h1>jsaon-gdx{st}{st1}</h1>")
    
    @app.route('/list',methods=['GET'])
    def list():
        info=USERS
    
        return render_template('list.html',info=info,html="<h1>jsaon-gdx</h1>",html1=func1)
    
    前台:
    {{html1("-DSB","-SB")}}

    #4.前后台取消转义(识别字符串中的html标签)

    #1.第一种方式:前台取消转移:{{变量名|safe}}
    {{html|safe}}
    
    #2.第二种后台实现: Markup("内容" )
    from flask import Flask,render_template,request,redirect,Markup
    
    @app.route('/list',methods=['GET'])
    def func1(st,st1):
        return Markup(f"<h1>jsaon-gdx{st}{st1}</h1>")

    1.Markup等价django的mark_safe 

    2.extends,include一模一样

    #5.前台反向解析

    # 前台
    <a href="{{url_for('别名',参数=值)}}">
    
    <a href="{{url_for('sb',nid=k)}}">

    # 后台
    @app.route('/detail/<int:nid>',methods=['GET'],endpoint="sb")
    def detail(nid):

    return "ok"
  • 相关阅读:
    laravel excel 导入
    linux 怎么解压
    mysql分表和表分区详解
    mysql主从复制windows-》linux
    Redis和Memcache的区别
    mysql group by 用法解析(详细)
    [置顶] mysql常用函数
    mysql测试数据库employees一些sql语句
    session入mysql
    session入库
  • 原文地址:https://www.cnblogs.com/tfzz/p/11844778.html
Copyright © 2011-2022 走看看