• 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,通过中间件

  • 相关阅读:
    poj 2312 Battle City
    poj 2002 Squares
    poj 3641 Pseudoprime numbers
    poj 3580 SuperMemo
    poj 3281 Dining
    poj 3259 Wormholes
    poj 3080 Blue Jeans
    poj 3070 Fibonacci
    poj 2887 Big String
    poj 2631 Roads in the North
  • 原文地址:https://www.cnblogs.com/allen2333/p/9522946.html
Copyright © 2020-2023  润新知