用Python如何写一个接口呢,首先得要有数据,可以用我们在网站上爬的数据
大量的数据保存到数据库比较方便。我用的pymsql,pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前在python3.x中,PyMySQL取代了MySQLdb。
1.连接数据库
2.创建数据库
3.爬取数据
4.保存到数据库
5.创建Web工程
运行我们的爬虫,很快数据库表里就有数据了。
然后开始写接口。我是通过Django+rest_framework来写的。
Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站。Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,减少重复的代码。
Django 目录结构
网址入口,关联到对应的views.py中的一个函数(或者generic类),访问网址就对应一个函数。
处理用户发出的请求,从urls.py中对应过来, 通过渲染templates中的网页可以将显示内容,比如登陆后的用户名,用户请求的数据,输出到网页。
与数据库操作相关,存入或读取数据时用到这个,当然用不到数据库的时候 你可以不使用。
表单,用户在浏览器上输入数据提交,对数据的验证工作以及输入框的生成等工作,当然你也可以不使用。
templates 文件夹
views.py 中的函数渲染templates中的Html模板,得到动态内容的网页,当然可以用缓存来提高速度。
后台,可以用很少量的代码就拥有一个强大的后台。
Django 的设置,配置文件,比如 DEBUG 的开关,静态文件的位置等。
Django 常用操作
1)新建一个 django project
django-admin.py startproject project_name
2)新建 app
python manage.py startapp app_name
一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。
还得在工程目录的settings.py文件在配置
在app/views.py下编写代码
在工程目录urls.py配置
通过python manage.py runserver启动,就会看到我们输出的“你好”了
3)创建数据库表 或 更改数据库表或字段
在app下的models.py创建表
运行命令,就可以生成对应的表
在views.py文件里就可以获取数据库的数据
6.写接口
接口使用rest_framework,rest_framework是一套基于Django的REST框架,是一个强大灵活的构建 Web API 的工具包。
写接口三步完成:连接数据库、取数据、数据输出
1)连接数据库
在工程目录下的settings.py文件下配置
2)取数据
既然要取数据,那model肯定得和数据库的一致,我发现一个快捷的方式可以把数据库中的表生成对应的model,在项目目录下执行命令
1python manage.py inspectdb
可以看到下图
取我们表的model拷贝到app下的models.py里
创建一个序列化Serializer类
提供序列化和反序列化的途径,使之可以转化为,某种表现形式如json。我们可以借助serializer来实现,类似于Django表单(form)的运作方式。在app目录下,创建文件serializers.py。
这样在views.py就可以来获取数据库的数据了
3) 数据输出客户端或前端
REST框架提供了两种编写API视图的封装。
@api_view装饰器,基于方法的视图。
继承APIView类,基于类的视图。
request.data会自行处理输入的json请求
使用格式后缀明确的指向指定的格式,需要添加一个format关键字参数
http http://127.0.0.1:8000/getlist.json # JSON 后缀
http://127.0.0.1:8000/getlist.api # 可视化 API 后缀
http://127.0.0.1:8000/getlist/ code="print 123"post
4)分页
最后别忘了在urls.py配置URL,通过浏览器就可以看到json数据了。
当然app也是可以调用我们的接口的
还有个问题
我们的数据有好几千条,一块返回来很不合理,所以需要分页,当然rest_framework框架提供了这个功能,post请求不支持,需要自己查数据库或者切片来进行返回。来看看rest_framework是如何来分页的。在models.py里创建一个类
在serializers.py创建俩个类,为什么是俩个?因为我们有俩个接口,一个明细,一个列表,而列表是不需要把字段的所有数据都返回的
在views.py里编写
到这里就完成了接口的编写,都是对框架的简单使用,希望对大家有帮助。
网友评论