Django实战-星座运势接口封装

2019-09-11 16:54:06 浏览数 (1)

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

通过用户自主添加应用后,需要实现各个应用的具体功能。在前一小节中,完成了天气应用的接口封装,在本小节中会采用 Django 的缓存机制,缩短小程序端的请求时间。

代码语言:javascript复制
from django.core.cache import cache

用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面。这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了。

缓存就是为了防止重复计算,把那些消耗了大量资源的结果保存起来,下次访问时就不用再次计算了。

一、设置缓存

在 settings 中的 CACHES 中设置缓存,下面是几个可用的缓存选项:

① Memcached

Django目前原生支持的最快最有效的缓存系统。要使用Memcached,需要下载Memcached支持库,一般是python-memcached或者pylibmc。

然后设置BACKEND为django.core.cache.backends.memcached.MemcachedCache(使用python-memcached时)。

代码语言:javascript复制
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

② DB Cache

Django可以把缓存数据存储在数据库中。

代码语言:javascript复制
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

③ Filesystem Cache

使用文件来存储缓存数据。

代码语言:javascript复制
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',
    }
}

④ Local-memory Cache

Django默认使用的缓存系统,数据存储在本地内存中

代码语言:javascript复制
CACHES = {
    'default': {
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "backend-cache",
    }
}

二、星座运势接口

通过 聚合API 的外部请求,将要查询的星座名称传入,即可得到相关信息

代码语言:javascript复制
key = "638590d043a54639f3560b5381f5c4f0"
api = "http://web.juhe.cn:8080/constellation/getAll"
代码语言:javascript复制
def constellation(cons_name):
    key = "638590d043a54639f3560b5381f5c4f0"
    api = "http://web.juhe.cn:8080/constellation/getAll"
    types = ("today", "tomorrow", "week", "month", "year")
    params = "consName=%s&type=%s&key=%s" % (cons_name, types[0], key)
    url = api   "?"   params
    print("星座运势"   url)
    response = requests.get(url=url)
    data = json.loads(response.text)
    print(data)
    return {
        "name": cons_name,
        "text": data
    }
代码语言:javascript复制
if __name__ == "__main__":
    data = constellation("金牛座")

三、星座运势接口封装

四、路由

代码语言:javascript复制
from django.urls import path

from .views import service

urlpatterns = [
    path("constellation", service.constellation),
]

0 人点赞