• Flask, Django


    1. 目录结构

    一般情况下,Django很系统、统一。Flask项目目录风格不同一,即使用上了蓝图。

    2. 数据库迁移

    Flask要用第三方extensions,而Django自带,这个很方便。

    3. 模块化

    Flask是用蓝图。Django可以自动生成python manage.py startapp <app_name>,并在Django的项目的settings那个INSTALLED_APPS字典里注册一下就好。

    4. 命令行

    Django的命令行初始更多功能,例如migrate。但Flask自定义命令很简单。
    启动方面,Flask有两种,一种是通过manage.py帮助脚本去运行,另一种是export环境变量,用flask run来运行,官方文档建议后面这种,1.02版本还新增了一个环境变量FLASK_ENV。因为Flask依赖5个包,其中一个是click,所以可以自定义CMD。

    @app.cli.command()
    def hello():
        click.echo('Hello, xxx!')
    
    flask hello
    

    5. 新建模型方面差不多。

    它们都是继承ORM的Model。建模之后都是要加入到数据库中,就是做一个数据库迁移操作。
    Flask是传入想要创建的字段类型到model.Column,而Django有明显的类给你使用,例如models.charField。

    6. 反向获取URL

    urlpatterns = [
        path('', views.post_list, name='post_list')
    ]
    

    这个name,相当于Flask的endpoint。意思都是通过反向这个名字,reverse(name)去获得URL。

    // 在模板中
    <a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>     //Django
    {% url_for('") %}  // Flask
    

    7. 路由

    Django的路由和view functions是分开写的:urls.py, views.py。而Flask是都写在views.py中,view function和url写在一起(以装饰器的形式app.route)。
    因为Django是MTV模式。其实和MVC模式差不多。大致上是Controller变成了views.py和urls.py。

    Flask命令行中使用flask routes可以查看URL与view function的映射关系。代码中使用app.url_map可以查看。

    8. 中间件使用

    Django在settings.py里设置,
    Flask要初始化中间件实例,然后传入app(Flask)实例。

    9. Request对象

    Django中,每个view function或者CBV中都要写一个request参数。而Flask的view function则不用,因为

    from flask import request
    
    # 这个request是对每个请求独立的,就像g变量。值得研究底层原理(Flask通过本地线程( thread local) 技术将请求对象在特定
    的线程和请求中全局可访问)
    

    10. 限制http请求方法

    Flask

    @app.route('/hello', methods=['GET', 'POST'])
    def hello():
          return '<h1>Hello, Flask!</h1>'
    

    Django

    from django.views.decorators.http import require_http_methods
    @require_http_methods(['GET','POST'])
    def login(request):
        pass
    

    11. 钩子函数

    Flask,加钩子装饰器

    @app.before_request
    def do_something():
        pass # 这里的代码会在每个请求处理前执行
    

    Django,通过中间件

  • 相关阅读:
    ansible设置串行的方法
    给k8s集群中的node节点加标签
    Prometheus断电后启动异常 Error on ingesting samples
    配置 containerd 镜像仓库完全攻略
    这款网络排查工具,堪称神器!
    k8s备份工具之velero
    CentOS 7安装megacli
    Atitit .h5文件上传 v3
    php切片处理视频大文件思路
    php切片处理视频大文件功能
  • 原文地址:https://www.cnblogs.com/allen2333/p/9522946.html
Copyright © 2020-2023  润新知