Django2:Web项目开发入门笔记(4)

948次阅读
没有评论

这一篇教程,我们通过URL分发(urls.py)和视图(views.py),做一个有意思的小功能。

通过URL请求中附带参数(问号“?”后方),进行翻译。

如下图所示:

Django2:Web项目开发入门笔记(4)

如果想实现翻译功能,我们需要百度翻译的接口,并且通过下方代码实现百度翻译接口的调用。

示例代码:(trans.py)

from urllib.parse import quote
from hashlib import md5
from http import client
import random
import json

appid = '通过百度翻译开发者平台申请获取'
secret_key = '通过百度翻译开发者平台申请获取'

def get_sign(salt, qurey):  # 生成调用API的签名
    sign = appid + qurey + str(salt) + secret_key
    m = md5()
    m.update(sign.encode('utf-8'))
    return m.hexdigest()

def trans(qurey, from_lang='zh', to_lang='en'):  # 实现翻译功能
    http_client = None
    salt = random.randint(12345, 67890)
    sign = get_sign(salt, qurey)
    myurl = '/api/trans/vip/translate' + '?appid=' + appid + '&q=' + quote(
        qurey) + '&from=' + from_lang + '&to=' + to_lang + '&salt=' + str(salt) + '&sign=' + sign
    try:
        http_client = client.HTTPConnection('api.fanyi.baidu.com')  # 连接API
        http_client.request('GET', myurl)  #发起请求
        response = http_client.getresponse()  #获取响应对象
        content = json.loads(response.read())  # 将调用API的返回结果转为字典
        return content['trans_result'][0]['dst']  # 返回翻译内容
    except Exception as e:
        return e
    finally:
        if http_client:
            http_client.close()

申请开发者APP ID和密钥流程:

1、进入百度翻译开放平台:http://api.fanyi.baidu.com/api/trans/product/index

2、打开页面后,点击【立即使用】按钮,申请开发者APP ID和密钥。

3、申请成功后,在开发者信息界面中即可看到APP ID和密钥。

Django2:Web项目开发入门笔记(4)

当我们完成上方的“trans.py”模块,我们将其放入项目的包(MyWeb)中,并在视图模块(views.py)导入这个模块。

示例代码:

from MyWeb import trans # 导入翻译模块

然后,在视图模块(views.py)中我们添加一个视图函数。

通过request.GET[‘参数名称’]获取URL中的参数值,并调用“trans.py”模块中的trans()函数,返回翻译结果。

特别提醒:一定要注意“request.GET”后面是方括号“[]”。

示例代码:(views.py)

def translate(request):  # 定义视图函数
    from_lang = request.GET['from_lang']  # 获取URL中的参数
    to_lang = request.GET['to_lang']  # 获取URL中的参数
    text = request.GET['words']  # 获取URL中的参数
    return HttpResponse(trans.trans(text, from_lang, to_lang))  # 返回响应内容对象

接下来,我们再进行URL分发的配置。

打开“urls.py”模块,在urlpatterns列表中添加一个新的配置。

示例代码:(urls.py)

path('trans/', siteviews.translate),  # 通过?传递参数进行处理

注意:因为新增加的配置是列表中的一项,代码的末尾要加上英文半角的逗号。

完成这一步之后,我们就可以启动开发服务器(如果忘记了,请参考上一篇教程),并在浏览器中输入URL,查看效果。

例如:http://127.0.0.1:8888/trans/?words=作者是帅哥&from_lang=zh&to_lang=en

这是一种比较常见的URL传递参数的方式,例如百度搜索。

下面,我们再来看一种传递参数的方式。

这种方式不通过问号附带参数,而是以下图这种形式。

Django2:Web项目开发入门笔记(4)

在我们之前学习自定义函数时,我们接触过关键字参数和位置参数两种。

如果说上一种附带参数的方式比较像关键字参数的话,当前这一种就比较像位置参数。

当前这种附带参数方式的参数位置都是固定的。

首先,我们还是在视图模块(views.py)中添加一个视图函数。

不过,这一次URL中参数值的获取是直接通过函数的参数进行获取。

示例代码:(views.py)

def translate2(request, words, from_lang, to_lang):  # 定义视图函数
    return HttpResponse(trans.trans(words, from_lang, to_lang))  # 返回响应内容对象

然后,是URL分发的配置。

打开“urls.py”模块,在urlpatterns列表中添加一个新的配置。

示例代码:(urls.py)

path('trans/<str:from_lang>/<str:to_lang>/<str:words>', siteviews.translate2),  # 通过定义url指定部分为参数进行处理

如上方代码所示,我们可以在配置中指定路径中的固定位置为不同的参数。

需要注意的是这里使用的是<类型:参数名称>的格式。

类型会限制参数的输入,共有5种类型:

  • int:正整数,包含0。
  • str:除路径分隔符“/”之外的非空字符串。
  • slug:由字母、数字、横线以及下划线其中一种或多种组成的字符串。
  • uuid:通用唯一识别码(Universally Unique Identifier),包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。
  • path:任何非空字符串,包含路径分隔符“/”。

另外,参数名称要和视图函数中的参数名称保持一致。

那么,如下图所示这种URL,如何进行分发?

Django2:Web项目开发入门笔记(4)

相信大家很快能得出答案!

示例代码:

path('trans&<str:from_lang>&<str:to_lang>&<str:words>', siteviews.translate2),  # 通过定义url指定部分为参数进行处理

最后,我们再来看一种URL分发的配置方法。

这一次的URL如下图所示:

Django2:Web项目开发入门笔记(4)

还是使用上一个视图函数,我们在“urls.py”模块中导入一个新的方法。

示例代码:

from django.urls import re_path  # 导入通过正则表达式处理路径的方法

然后,在配置中添加一行新的代码。

示例代码:

re_path('trans/(.+)&(.+)-(.+)$', siteviews.translate2),  # 通过正则表达式获取url匹配部分为参数进行处理

如上方代码所示,这种方法是通过正则表达式获取路径中的参数,并传递给视图函数进行处理。

需要注意的是URL路径中的参数位置顺序必须与视图中的参数顺序相同。

本节练习源代码:【点此下载

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:wuyou2022-12-28发表,共计3074字。
新手QQ群:570568346,欢迎进群讨论 Python51学习