Warning:本文仅适用小白科普,老手请绕道。
我只想要妹子图
djangorestframework是一个能提供restful风格api的........框架?包?无所谓,我们关心的是他能干什么。
首先,什么是restful api?
就是rest风格的api。
什么是rest风格的api?
就是能返回我所需的资源的api。
???
举个栗子,我们在浏览器中输入jiandan.net(煎蛋网)
后端服务器将煎蛋的首页返回个浏览器,是一个html文件。当然,上面包含了各种媒体资源的链接,比如我们最喜欢的妹子图。
好了,现在我不想要煎蛋网首页了,因为上面的东西太多了,影响我学习(我只想要妹子图,其他的栏目我不敢兴趣)
我只想下载所有煎蛋妹子图并保存到本地,以供我学习研究用(滑稽)
我只关心妹子图,其他的什么html我不感兴趣。
能不能只要妹子图,不要首页?
好的,假设煎蛋网听到了你的呼声,开发了api接口。
现在煎蛋网提供了restful api,可以让我们可以按照他给出的方式获取相应的资源。
于是我只要在浏览器中输入jiandan.net/meizi
回车!
满屏的妹子图!!其他什么都没有!(当然,是妹子图的链接(滑稽))
这就是restful api
能返回资源或者资源地址的接口
光django也行,只是比较麻烦
本来,要想让网站能对外提供restful api,光django也行,我们先看下django下是如何对外提供restful api的。
假设现在我们已经启动了一个django项目,并且model.py文件下已经定义了Goods这个类,如下所示:
class Goods(models.Model):
name = models.CharField(max_length=100, verbose_name="商品名")
market_price = models.FloatField(default=0, verbose_name="市场价格")
add_time=models.DateTimeField(default=datetime.now, verbose_name="添加时间")
为了能让用户在浏览器中输入'域名/goods' 就能在浏览器中看到所有数据库中的商品的信息,我们需要配置下view.py这个文件:
class GoodListView(View):
def get(self,request):
goods=Goods.objects.all() #获取所有商品,类型为list
json_data = serializers.serialize('json', goods) #序列化
json_data = json.loads(json_data) #反序列化
returnJsonResponse(json_data, safe=False) #返回json格式的数据
上面之所以发生了先serializers.serialize()序列化,再json.load()反序列化这种逆天操作。
是因为,json模块本身的序列化能力有限,无法序列化add_time这种时间类型的数据.......
于是只能曲线救国。
好了,现在在url.py文件中配置我们的路由表,将指向域名/goods 的请求转给GoodListView来处理。
urlpatterns = [
url(r'^goods/', GoodsListView.as_view(), name='goods_list'),
]
其他一些django常规操作先不表。
假设一切正常,当我们在浏览器中输入'localhost:8000/goods' 我们就能看到满屏的goods数据,都是json格式的。
既然json是通用的数据交换格式,有了json就什么都有了。
这么说来,django已经够了呀?还要什么@#%%framework呢?
不够好用,我们要更好用的-----790 contributers from github
所以,我们有了
djangorestframework!
网友评论