flask之web网关、三件套、配置、路由(参数、转化器及自定义转化器)、cbv、模板语言、session

1.wsgiref.py

from wsgiref.simple_server import make_server

def mya(environ, start_response):
    print(environ)
    print(start_response)
    start_response('200 OK', [('Content-Type', 'text/html')])
    if environ.get('PATH_INFO') == '/index':
        with open(r'index.html', 'rb') as f:

            data = f.read()

    elif environ.get('PATH_INFO') == '/login':
        with open('login.html', 'rb') as f:
            data = f.read()
    else:
        data = b'<h1>Hello, web!</h1>'
    #     返回数据,用列表的方式
    return [data]

if __name__ == '__main__':
    myserver = make_server('', 8011, mya)
    print('监听8011')
    myserver.serve_forever()
#     http://127.0.0.1:8011/index

2.werzeug.py

from werkzeug.wrappers import Request, Response

@Request.application
def hello(request):
    print(request)
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    # run_simple('127.0.0.1', 4000, hello)
    run_simple('localhost',4000,hello)

3.三件套

from flask import Flask,render_template,redirect,jsonify,request
app=Flask(__name__)

'''
1 返回字符串
2 返回模板:render_template
3 跳转:redirect
4 json返回

'''

@app.route("/")
def index():

    return "ojbk"

@app.route("/index")
def index1():
    return render_template("index.html")

@app.route("/home")
def home():
    return redirect("/index")

@app.route("/json")
def json1():
    data_dic={'name':"jason",'age':38}
    return jsonify(data_dic)

if __name__ == '__main__':
    app.run()

4.配置文件



from  flask import Flask
app = Flask(__name__)
#方式一
# 只能配置下面俩个
# app.debug=True
# app.secret_key="asdjja"
#方式二,以字典的形式
# app.config['DEBUG']=True
#方式三 ,以文件的形式
app.config.from_pyfile("settings.py")
#方式四 ,以类的形式(*****)
# app.config.from_object("settings.test")

@app.route("/")
def index():
    return "fdsfk"

if __name__ == '__main__':
    app.run()

#settings.py
# DEBUG=True

class comment:
    DEBUG = True

class test(comment):
    pass

class onlin(comment):
    pass

5.路由本质

from  flask import Flask
app = Flask(__name__)

# @app.route("/") #@decorator
def index():
    return "ok"

app.add_url_rule("/index", view_func=index)

if __name__ == '__main__':
    app.run()

6.cbv.py

from  flask import Flask,views,url_for
app = Flask(__name__)

#简单模式

# class IndexView(views.View):
#     methods = ['GET']
#     #给dispatch_request加装饰器
#     #decorators = [login, ]
#     def dispatch_request(self):
#         print('Index')
#         return 'Index!'
#     def post(self):
#         pass
#     def get(self):
#         pass
#
# app.add_url_rule('/index1', view_func=IndexView.as_view(name='index1'))  # name=endpoint
#相当于app.add_url_rule('/index2', view_func=view) view.__name__=index1

#或者,通常用此方式
class IndexView(views.MethodView):
        methods = ['GET']
        # decorators = [auth, ]

        def get(self):
            return 'Index.GET'

        def post(self):
            return 'Index.POST'
app.add_url_rule('/index', view_func=IndexView.as_view(name='index'))  # name=endpoint

if __name__ == '__main__':
    app.run()

7.路由转化器

from  flask import Flask,views,url_for, redirect
app = Flask(__name__)

@app.route("/index/",endpoint='a',methods=["POST","GET"],strict_slashes=True)
def index():
    print(url_for('b'))
    return redirect(url_for('b'))

@app.route('/inde1/', endpoint='b')
def index():
    return 'hahha'
@app.route("/index2")
def index2():
    return "吃饭去了"

if __name__ == '__main__':

    app.run()

8.自定义转化器

#1 写类,继承BaseConverter
#2 注册:app.url_map.converters['regex'] = RegexConverter
# 3 使用:@app.route('/index/<regex("\d+"):nid>')  正则表达式会当作第二个参数传递到类中
from flask import Flask, views, url_for
from werkzeug.routing import BaseConverter

app = Flask(import_name=__name__)

class RegexConverter(BaseConverter):
    """
    自定义URL匹配正则表达式
    """
    def __init__(self, map, regex):
        super(RegexConverter, self).__init__(map)
        self.regex = regex

    def to_python(self, value):
        """
        路由匹配时,匹配成功后传递给视图函数中参数的值
        """
        return int(value)+123

    def to_url(self, value):
        """
        使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
        """
        val = super(RegexConverter, self).to_url(value)
        return val+"json"
# 添加到flask中
app.url_map.converters['regex'] = RegexConverter
@app.route('/index/<regex("\d+"):nid>')
def index(nid):
    print(nid)
    print(url_for('index', nid='888'))
    return 'Index'

if __name__ == '__main__':
    app.run()

9.模板语言

from  flask import Flask,render_template,Markup
app = Flask(__name__)

USERS = {
    1:{'name':'张三','age':18,'gender':'男','text':"道路千万条"},
    2:{'name':'李四','age':28,'gender':'男','text':"安全第一条"},
    3:{'name':'王五','age':18,'gender':'女','text':"行车不规范"},
}

def func1(flag):
    return Markup(f"<h1>jason dsb ?{flag}</h1>" )

@app.route("/index")
def index():
    data=USERS
    flag=True
    htm="<h1>jason dsb</h1>"
    return render_template("index1.html",data=data,flag=flag,name="sb",name1="sb1",htm=htm,func=func1)

if __name__ == '__main__':
    app.run()

10.session原理

from  flask import Flask,session
app = Flask(__name__)
app.secret_key="sdasjdiashdiah"
app.config["SESSION_COOKIE_NAME"]="jason"

# app.session_interface

@app.route("/")
def index():
    session['name']="jason"
    return "ok"

@app.route("/index")
def index1():
    print(session['name'])
    return "123"

if __name__ == '__main__':
    app.run()

11.templatess

<!-- detail.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>详细信息 {{info.name}}</h1>
    <div>
        {{info.text}}
    </div>
</body>
</html>

<!--index.html-->
<!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="{{url_for('detail',nid=k)}}">查看详细</a></td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>
<!--index1.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>
 {% for k,v in data.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 %}

{% if flag %}
    {{name}}
{% else %}
    {{name1}}
{% endif %}
 <br>

{{htm|safe}}

{{func("yes")}}

</body>
</html>
<!--login.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>用户登录</h1>
    <form method="post">
        <input type="text" name="user">
        <input type="text" name="pwd">
        <input type="submit" value="登录">{{error}}
    </form>
</body>
</html>

原文地址:https://www.cnblogs.com/michealjy/p/12043784.html

时间: 2024-08-29 14:29:53

flask之web网关、三件套、配置、路由(参数、转化器及自定义转化器)、cbv、模板语言、session的相关文章

[原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证

flask路由中的endpoint 与自定义转化器 ''' endpoint主要用于 反向解析, 例如:login函数中配的路由是/login,其中endpoint='lg' 则在其他函数,可以用 url=url_for('lg'),redirect(url)直接访问login函数 ''' ''' 自定义转化器,可以用来动态更新url_for 的跳转路由 其中 to_python主要是给后端的,可以对路由参数做修改 to_url是给前端url的,可以更新指定的url ''' flask与djan

jsp 使用application.getInitParameter来获取web.xml中配置参数

jsp中9个内置对象之一application,它的数据对整个web应用都有效,application有一个重要的用途就是获取web.xm中的配置参数,这样可以提高代码的移植性.应用案例如下: 在web.xml中配置如下代码: <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-p

Web开发中 前端路由 实现的几种方式和适用场景

浅析Web开发中前端路由实现的几种方式 主题 Web开发 故事从名叫Oliver的绿箭虾`说起,这位大虾酷爱社交网站,一天他打开了 Twitter ,从发过的tweets的选项卡一路切到followers选项卡,Oliver发现页面的内容变化了,URL也变化了,但为什么页面没有闪烁刷新呢?于是Oliver打开的网络监控器(没错,Oliver是个程序员),他惊讶地发现在切换选项卡时,只有几个XHR请求发生,但页面的URL却在对应着变化,这让Oliver不得不去思考这一机制的原因- 叙事体故事讲完,

System.Web.Http.Cors配置跨域访问的两种方式

System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心得.在webapi中使用System.Web.Http.Cors配置跨域信息可以有两种方式.  一种是在App_Start.WebApiConfig.cs的Register中配置如下代码,这种方式将在所有的webapi Controller里面起作用. using System; using Sys

Flask教程 —— Web表单(上)

第二章中介绍的request对象公开了所有客户端发送的请求信息.特别是request.form可以访问POST请求提交的表单数据. 尽管Flask的request对象提供的支持足以处理web表单,但依然有许多任务会变得单调且重复.表单的HTML代码生成和验证提交的表单数据就是两个很好的例子. Flask-WTF扩展使得处理web表单能获得更愉快的体验.该扩展是一个封装了与框架无关的WTForms包的Flask集成. Flask-WTF和它的依赖集可以通过pip来安装: (venv) $ pip

MVC4 路由参数带点 文件名后缀导致错误

错误描述 最近在研究office在线预览,用到mvc4  apicontroller 需要传参是文件名,如test.docx导致错误"指定的目录或文件在 Web 服务器上不存在", 请求的路径如:api/wopi/files/test.docx?access_token=access_token.如下截图: 项目中路由配置: public static class WebApiConfig { public static void Register(HttpConfiguration

配置网络参数

配置文件位置:/etc/sysconfig/network-scripts/ifcfg-eth0网卡基本配置: DEVICE=eth0 网卡的名字 HWADDR=00:0c:29:90:89:d9 HWADDR HardWare Address 硬件地址 MAC地址 TYPE=Ethernet 网络类型 以太网 UUID=ae779ae6-044d-43d5-a33b-48c89e8de10e #UUID 做到系统中独一无二. ONBOOT=yes BOOT ON ? 在开机或重启网卡的时候是否

CentOS下的路由知识及配置路由

博文目录 简介 上一篇博文已经讲解了IP地址的配置,那么有IP,就准备开始进行通信吧,网络之间的通信主要是依靠路由器,当然生成环境中是拥有路由器的,但是系统中的路由配置也是需要了解一下地,今天讲解一下软路由的显现,与一个路由的小实验 linux下需要启用ip_forword 启用路由功能 echo 1 > /proc/sys/net/ipv4/ip_forword 一.路由表中的接口 到达目标网段从本路由器的那个接口能到达,这个借口就本路由的记录接口 1.如果目标网络和路由器直接相连,网关即是路