Django使用AJAX调用自己写的API接口

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 01:11   14   0

Django使用AJAX调用自己写的API接口

在这里插入图片描述
***

具体代码和数据已上传到github

https://github.com/PythonerKK/eleme-api-by-django-restful-framework
***

在这个例子中,我们将使用Django编写饿了么高校外卖商家查询API接口,并且使用AJAX技术来实现API接口的使用,包括使用ajax get方法加载更多数据,使用ajax方法来更新、修改、新增、删除数据。利用API可以做到前后端分离,为开发web应用提供了便利。

安装rest framework

首先使用Pycharm新建一个Django项目,并且使用virtualenv或者pipenv虚拟环境
在这里插入图片描述
创建成功会自动安装Django2.1和所需依赖,restframework框架需要自己手动安装

//激活虚拟环境安装以下
(venv)$ pip install djangorestframework
(venv)$ pip install django-filter 
(venv)$ pip install pytest
(venv)$ pip install pytest-django 
//由于笔者使用Postgresql数据库,所以还需要安装以下
(venv)$ pip install psycopg2
//使用mysql数据库安装如下
(venv)$ pip install pymysql

准备数据来提供服务

数据来源:饿了么爬虫
数据内容:全国所有大学附近的外卖商家Top20
数据需要导入数据库
在这里插入图片描述

Django编写rest api接口

项目结构
在这里插入图片描述
settings.py.

// 安装的app如下
INSTALLED_APPS = [
    #...
    'rest_framework',
    'django_filters',
    'api.apps.ApiConfig',
    'front.apps.FrontConfig',
]
//restframework 配置如下

REST_FRAMEWORK = {
//这里配置了分页处理,每页最多20个项目
'DEFAULT_PAGINATION_CLASS':'api.custompagination.LimitOffsetPaginationWithUpperBound',
    'PAGE_SIZE': 20,
    'DEFAULT_FILTER_BACKENDS': (
        //这里配置了排序、过滤、搜索器
        'django_filters.rest_framework.DjangoFilterBackend',
        'rest_framework.filters.OrderingFilter',
        'rest_framework.filters.SearchFilter',
    ),
    //这里配置了用户认证,管理员才可以更改内容,未登录不能更改
    'DEFAULT_AUTHENTICATION_CLASSES':(
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ),
    //这里配置了访问次数限制,过多会返回429错误 too many requests
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle',
    ),
    //这里配置了访问次数,anon代表匿名用户,user代表已登录用户,entries是我自己设置的作用域,300/hour代表最多300次每小时
    'DEFAULT_THROTTLE_RATES': {
        'anon': '300/hour',
        'user': '100/hour',
        'entries': '200/hour',
    },
    'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.NamespaceVersioning',
}

models.py.

from django.db import models

class Entry(models.Model):
    city = models.CharField(max_length=50)
    school = models.CharField(max_length=100)
    link = models.CharField(max_length=100,null=True,default='null')
    name = models.CharField(max_length=200)
    lat = models.CharField(max_length=20,null=True,default='0.0')
    lng = models.CharField(max_length=20,null=True,default='0.0')
    address = models.CharField(max_length=200,null=True,default='null')
    distance = models.CharField(max_length=20,null=True,default='0')
    time = models.CharField(max_length=20,null=True,default='0:00')
    contact = models.CharField(max_length=200,null=True,default='null')
    score = models.CharField(max_length=10,null=True,default='0')
    comments = models.CharField(max_length=20,null=True,default='0')
    sell = models.CharField(max_length=20,null=True,default='0')
    im`}*(}b"k"kg:>(}хl((х(qmulqmulqхmulmulqmulqmulq(vV6эZW>CV6ΠńSZWb&r'V61AQ
#ZWbV6r>Kn>?ще(蘌Q
 蘌х(ф(((((((фф((ZkRgj((A
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP