素材牛VIP会员
django 编写接口的问题
 34***86  分类:Python  人气:844  回帖:2  发布于6年前 收藏

最近做一个django的项目,和其他项目做对接,接口化。

有些事情不明,
1、用django,写url,views这种方式写接口,行吗。

2、django中有rest_framework 这种rest接口的形式,我粗略看了下,不太明白serializers这个什么作用

3、django原声写url,views的方式去写接口,和用rest_framework有什么区别。

为什么要用rest呢。

小白,sorry,望大神回答疑惑。

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv3 码奴
li***09 软件测试工程师 6年前#1

用django,写url,views这种方式写接口,行吗。

行。因为所谓接口也是普通的URL。


django中有rest_framework 这种rest接口的形式,我粗略看了下,不太明白serializers这个什么作用

见官网的解释:

Serializers allow complex data such as querysets and model instances to be converted to native Python datatypes that can then be easily rendered into JSON, XML or other content types. Serializers also provide deserialization, allowing parsed data to be converted back into complex types, after first validating the incoming data. -- via http://www.django-rest-framework.org/api...

在后台,我们使用 ORM 处理数据。为了方便业务逻辑的表达,此时的数据是以 Python 对象的形式存在。但在前后端交流的过程中,原生对象是不允许被传输的,所有的数据都需要转化为纯字符格式,如 XML、JSON。这里就涉及到一个 Python 对象 与 字符流 相互转化的问题。而 Serializers 就是沟通它们的桥梁。


django原声写url,views的方式去写接口,和用rest_framework有什么区别。

没有区别。但 rest-framework 为你封装好了一大堆功能,开箱即用,能使你的代码显得更加简洁。这一点在接口数目特别多的时候尤为明显。


为什么要用rest呢。

参考 http://stackoverflow.com/questions/53200...


此外,向 DRF 的作者致敬。尽管他已经不再跟进这个项目了(http://www.django-rest-framework.org/top...),但我们永远都无法忘记他和他的团队给开发者带来的便利。

Lv4 码徒
wa***10 移动开发工程师 6年前#2

我们的做法是写一个api的装饰器,然后用来注解View上的方法,方法返回dict或者直接抛出异常。这样可以把权限控制也放到装饰器上面去,最后实际的API就只需要这样写:

class ApiView(BaseApiView):
    @api
    def login(username,password):
        pass
    @api
    def register(phone,password,email):
        pass
    @asapi(role="admin")
    def sysinfo():
        pass

代码里面的BaseApiView和api都是你需要去实现的,这里只是简单的伪代码。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取