Django2萌新入门笔记(4)

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

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

如下图所示:

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

示例代码:(trans.py)

from urllib.parse import quotefrom hashlib import md5from http import clientimport randomimport jsonappid = '通过百度翻译开发者平台申请获取'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和密钥。

当我们完成上方的“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传递参数的方式,例如百度搜索。

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

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

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

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

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

首先,我们还是在视图模块(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///', siteviews.translate2), # 通过定义url指定部分为参数进行处理

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

需要注意的是这里使用的是的格式。

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

int:正整数,包含0。

str:除路径分隔符“/”之外的非空字符串。

slug:由字母、数字、横线以及下划线其中一种或多种组成的字符串。

uuid:通用唯一识别码(Universally Unique Identifier),包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。

path:任何非空字符串,包含路径分隔符“/”。

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

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

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

示例代码:

path('trans&&&', siteviews.translate2), # 通过定义url指定部分为参数进行处理

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

这一次的URL如下图所示:

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

示例代码:

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

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

示例代码:

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

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

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180428G05FYW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券