ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

初识flask、flask四剑客、配置文件、路由系统与反向解析、FBV与CBV

2019-11-11 21:53:03  阅读:262  来源: 互联网

标签:__ return FBV 配置文件 flask app Flask name


Flask,是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务,在介绍Flask之前首先来聊下它和Django的联系以及区别,

django个大而全的web框架,它内置许多模块,flask是一个小而精的轻量级框架,Django功能大而全,Flask只包含基本的配置, Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由,基本的数据库管理等等内建功能。

与之相反,Flask只是一个内核,默认依赖于2个外部库: Jinja2 模板引擎和 WSGI工具集--Werkzeug , flask的使用特点是基本所有的工具使用都依赖于导入的形式去扩展,flask只保留了web开发的核心功能。

 

socket:

from wsgiref.simple_server import make_server

def mya(environ, start_response):
    print(environ)
    start_response('200 OK', [('Content-Type', 'text/html')])
    if environ.get('PATH_INFO') == '/index':
        with open('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()

 

Werkzeug是一个WSGI工具包,他可以作为web框架地城库,Werkzeug不是一个web服务器,也不是一个web框架,而是一个工具包
他可以作为WSGI工具包,他也也可以作为一个web框架的底层库,因为封装好多web框架爱的东西,例如:Request,Response,
flask是基于werkzeug写的

from werkzeug.wrappers import Request, Response

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


if __name__ == '__main__':
    from werkzeug.serving import run_simple

    run_simple('localhost', 4000, hello)

 



第一个flask:
from flask import Flask

app = Flask(__name__)

# flask的路由是基于装饰器
# 装饰器执行过程如果没有括号:把装饰器下面的函数当做参数传入装饰器(函数)去执行,并返回结果,赋值
@app.route('/')
def index():
return 'hello'


if __name__ == '__main__':
app.run(port=8000)
# 这里run本质上就是run_simple

flask四剑客:
1.
render_template:就是渲染页面
2.redirect:重定向
3.return ’’ 发送普通数据
4.jsonify:传送json数据
from flask import Flask, render_template, request, redirect,jsonify

app = Flask(__name__)

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


@app.route('/')
def index():
    # 返回所有用户的表格
    # 返回模板,模板渲染的数据应该打散传过去
    # 返回json数据
    # name_dict = [{'name': "jason-gdx"}, {'name': "tank-sb"}]
    # return jsonify(name_dict)
    return render_template('index.html', user_dic=USERS)


# methods = ['GET','POST']  允许get和post请求
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    # request.form 就是django中的POST
    user = request.form.get('user')
    pwd = request.form.get('pwd')
    print(user, pwd)
    if user == 'cnm' and pwd == '123':
        return redirect('/')  # 重定向
    else:
        return '用户名密码错误'


@app.route('/detail/<int:nid>')  # 有名分组
def detail(nid):
    user = USERS[nid]
    return render_template('detail.html', user=user)


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

配置文件:

from flask import Flask

app = Flask(__name__)
# 第一种方式:
# app.debug = True
# app.secret_key = 'sb'
# 第二种方式:以字典的方式
# app.config['debug'] = True
# 第三种,以文件的形式
# app.config.from_pyfile('settings.py')
# 第四种:以类的形式(推荐),可以继承基类,随时进行切换
app.config.from_object('settings.TestingConfig')


@app.route('/')
def index():
    print(123)
    return 'hello'

路由系统和反向解析

from flask import Flask, url_for,redirect

app = Flask(__name__)


# 本质:
#  1.虽然flask路由基于装饰器,但它的本质是:add_url_rule
#  2.我不用装饰器来配置了,直接用add_url_rule
#  3.endpoint随便取,但是不能重复,一旦重复就会报错
# @app.route('/', methods=['GET'],endpoint='sb')
def index():
    return 'hello'


# endpoint = 起别名
app.add_url_rule('/', view_func=index, endpoint='sb')


# 反向解析:url_for('sb')
@app.route('/login')
def login():
    print(url_for('sb'))
    return redirect(url_for('sb'))

flask视图函数(CBV)

from flask import Flask, views

app = Flask(__name__)
app.debug = True


# class IndexView(views.View):
#     methods = ['POST', 'GET']  # 请求方式
#     decorators = []
#
#     def dispatch_request(self):
#         print('index')
#         return 'Index'

class IndexView(views.MethodView):
    methods = ['POST', 'GET']  # 请求方式

    # 装饰器怎么加?,排在第一,最内层
    # decorators = [装饰器1,装饰器2]

    def get(self):
        print('index')
        return 'Index:get'

    def post(self):
        return 'index:post'


app.add_url_rule('/index', view_func=IndexView.as_view(name='index'))
if __name__ == '__main__':
    app.run()

"""
-django中的缓存
    -三种粒度
        -全栈:两个中间件
        -单视图缓存:用装饰器@cache_page(15)
        -局部缓存:
            {% load cache %}
            {% cache 2 'name'%}
            <h3>缓存:------:{{ t }}</h3>
            {% endcache %}
"""

 

 



标签:__,return,FBV,配置文件,flask,app,Flask,name
来源: https://www.cnblogs.com/wukai66/p/11838719.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有