Django RESTful API搭建及常见问题

Coding Alan 4年前 (2017-04-06) 5166次浏览 0个评论 扫描二维码

Django中内置的有一些Json数据的处理和返回方案

虽然看似以上方案也可以打造我们的API,但更为灵活的Rest API方案还是应该要采用Django REST framework

安装

除djangorestframework, markdown, django-filter外,建议同时安装coreapi,django-guardian, 环境搭建参照Django环境搭建及开发

Serializer

使用步骤一、在对应App下新建serializers.py

使用步骤二、Views.py

分页

ViewSet

用法一

过滤、搜索、排序

跨域访问

API通常都是由不同域名来进行调用,此将会出现如下报错 Failed to load resource: the server responded with a status of 504 (Gateway Timeout) Django的解决方案如下

权限认证

Token配置

Django RESTful API搭建及常见问题

请求时的header为Authorization: Token 虽然Django REST Framework(DRF)的Token非常强大,但存在着无有效期、一旦泄露则面临风险,因此有人根据JWT规范开发一个REST framework JWT的认证方式,安装配置也很简单

请求时的header为Authorization: JWT

权限控制

AllowAny
IsAuthenticated
IsAdminUser
IsAuthenticatedOrReadOnly
DjangoModelPermissions
DjangoModelPermissionsOrAnonReadOnly
DjangoObjectPermissions API暴露太多权限(POST, PUT)时需谨慎

常见问题

1.Cannot apply DjangoModelPermissions on a view that does not set .queryset or have a .get_queryset() method. 很明显这是Django Rest Framework的权限导致某些接口页面无法访问,所以自然而然地大多数人会告诉你进行如下修改

但这样做会对全局产生影响,建议通过装饰器仅对相应的类或方法进行这一控制

添加DjangoJSONEncoder来解决这一问题

3.IntegrityError at /api/***/ (1048, “Column ‘***’ cannot be null”) 这个似乎出现在操作包含外链的Model时,将POST的数据插入到数据库中,一种解决方法是: 将Serializer中的HyperlinkedModelSerializer修改为ModelSerializer 4.Cannot filter a query once a slice has been taken. Django RESTful API搭建及常见问题 在写api时只想暴露几条记录,获取单条记录详细信息时就出现了上面的错误,只针对调用的话在url后加上?limit=3这样的限制,但如果不只想在调用时进行限制呢?一种方法是添加字段用于过滤,还有就是下面的方法可供参考

5. TemplateDoesNotExist at /xxxx/ django_filters/rest_framework/crispy_form.html 出现这一报错是由于没有在settings.py的INSTALLED_APPS中添加django_filters

喜欢 (1)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址