前端页面
对于复杂的前端页面来说,最好使用一套CSS框架来完成基本的布局和样式。项目中使用uikit框架。
所有的静态资源文件统一放到static目录下,并按照类别归类。
由于页面可能存在很多相同的部分,比如页眉和页脚。常见的模板引擎已经考虑到了页面上重复的HTML部分复用问题。
一般有两种实现方式,一种是include。比如:
这样,相同的部分incheader.html和incfooter.html就可以共享。但是include方法不利于页面整体结构的维护。
还有另一种是通过“继承”的方式,编写一个父模板,定义一些可替换的块。然后编写多个子模板,替换父模板中的block。
一旦编写好了父模板,编写子模板非常容易。
编写首页
首先是编写一个父模板, 。包含一些block,比如meta块,标题块, 标签中插入的JavaScript代码,引入的文件块等。最重要的就是content,页面内容块。
然后就可以编写一个blog.html页面,显示博客文章的列表。
相应的URL的处理函数需要修改为:
Blog的创建日期显示的是一个浮点数,因为它是由这段模板渲染出来的:
解决方法是通过jinja2的filter(过滤器),把一个浮点数转换成日期字符串。编写一个datetime的filter,用法如下:
filter需要在初始化jinja2时设置。相关代码如下:
为移动应用开发api
REST就是一种设计API的模式。最常用的数据格式是JSON。
一个API也是一个URL的处理函数,我们希望能直接通过一个@api来把函数变成JSON格式的REST API,这样,获取注册用户可以用一个API实现如下:
只要返回一个dict,后续的response这个middleware就可以把结果序列化为JSON并返回。
我们需要对Error进行处理,因此定义一个APIError,这种Error是指API调用时发生了逻辑错误(比如用户不存在),其他的Error视为Bug,返回的错误代码为internalerror。
客户端调用API时,必须通过错误代码来区分API调用是否成功。错误代码是用来告诉调用者出错的原因。很多API用一个整数表示错误码,这种方式很难维护错误码,客户端拿到错误码还需要查表得知错误信息。更好的方式是用字符串表示错误代码,不需要看文档也能猜到错误原因。
领取 专属20元代金券
Get大咖技术交流圈