1 说明
Flask和传统前端开发不太一样的地方是使用了模板(Jinja)大大减少了重复的代码工作量,提高了复用性。
但是前后端涉及的内容太多,需要多人协同,那么就可能不是用Jinja来开发前端页面了。
本文主要讨论前后端交互的一些规范,使得不同的前端方式用同样的(或者可预见的)方式向后端请求服务。
2 先说Jinja方式
这里就不展开说Jinja的使用了,简单来说,Jinja提供了一种可以继承和复用的模板方式,从而可以生成文本。Html只是其中一种特殊的文本。
对于前端来说,要展示一个页面有几个元素:H5元素、CSS、JS、静态文件。在Flask基础之下:
- 1、H5元素放在./templates 之下
- 2、CSS、JS、静态文件均放在./static之下
规范1:从存储角度的规范,开发者要把依赖的文件分别保存到static和templates
文件 | 地址 |
CSS、JS和静态文件 | ./static/developer/yourname |
H5 模板元素 | ./templates/developer/yourname |
后端为前端提供了路由(跳转),以及数据交互的功能。后端给前端提供的是视图函数表,以及参数说明。
蓝图 | 视图函数 | 功能 | 请求方式 | 参数格式 |
blueprint_name | view1_developer_yourname | 功能1 | GET | None |
blueprint_name | view2_developer_yourname | 功能2 | GET,POST | Form, JSON(Ajax) - 详细字段另给 |
如果从后端发起需求,就是把视图函数表给到前端,指明后端接受的请求方式,声明会输出给前端的模板字段。对于有参数的视图函数:
蓝图 | 视图函数 | 功能 | 参数个数 | 参数序号 | 参数名称 | 参数说明 | 例子 |
blueprint_name | view1_developer_yourname | 功能1 | 3 | 1 | form_name | 字符变量 | ‘myform’ |
blueprint_name | view1_developer_yourname | 功能1 | 3 | 2 | a_list | 数据表的表头 | [‘a’,‘b’,‘c’] |
blueprint_name | view1_developer_yourname | 功能1 | 3 | 3 | a_dict | 字典 | {‘a’:1, ‘b’:1} |
规范2: 如果是后端发起的请求,后端向前端发送其视图函数的方式和内容;前端发起的话就由前端询问到蓝图名称后发起。
如果是从前端发起需求,同样给到这样一个表格。
从交互方式上,前端和后端存在几种请求方式:
- 请求并跳转(GET)。
- 请求并跳转(POST)。
- 请求不跳转(Ajax)。
3 再说普通方式
Jinja(模板)方式是创造具有通用性的模板,里面的内容可以进行参数化(甚至循环),这样就可以通过参数按需生成各种实际的脚本,的确很方便。
但是如果与其他人协同,要求对方也理解并使用Jinja就有点无理。
因此不必要求对方也使用jinja,从省事的角度来说,你给我静态文件更容易(省却了传入jinja变量)。
普通方式的改动很简单,把蓝图直接用绝对地址来替换就可以了,例如bluename用 /appxxx来替代。