Django 官网 有详细的使用说明,这里只做简单记录。
1.起因
Java 项目用到了 Python 的类库,使用jython-standalone
在 idea 里可以调用,但是部署时模块无法找到,所以萌生了用 Python 搭建算法中心的想法。
2.使用
2.1 环境说明
[root@aliyun ~]# python3 Python 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)] on linux [root@aliyun ~]# pip3 -V pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
2.2 安装使用
命令行里的 project_name 和 application_name
根据项目实际需求进行自定义。
# 1. 安装 Django pip3 install Django==3.2.12 # 2. 创建项目 Project django-admin startproject project_name # 3. 创建应用 Application {project_name 目录下} python3 manage.py startapp application_name # 4. 启动项目 python3 manage.py runserver host:port # 5. 访问应用 # host:port/application_name
2.3 实例分享
由内 application
而外 project
进行文件的修改,首先修改 application_name
目录下的文件:
1️⃣ urls.py
添加接口请求路径
urlpatterns = [ path('', views.index, name='index'), # 添加接口请求路径 path('guessGenderByName', views.guess_gender_by_name, name='guess_gender_by_name'), ]
2️⃣ views.py
添加接口方法实现
@csrf_exempt def guess_gender_by_name(request): req = json.loads(request.body.decode()) flag_ = req['flag'] res = ngender.guess(req['name']) if flag_ == 0 or flag_ == 1: res = res[flag_] else: res = ','.join(str(item) for item in res) return HttpResponse(res)
修改 project_name
目录下的文件:
1️⃣ settings.py
添加允许的主机 host,否则报错:Invalid HTTP_HOST header: 'hostName:8087'. You may need to add 'hostName' to ALLOWED_HOSTS.
# 仅添加部署服务器的IP即可 ALLOWED_HOSTS = ['hostName'] # 也可以放行所有 ALLOWED_HOSTS = ['*']
2️⃣ urls.py
将应用 application_name
的请求路径添加到项目project_name
内
urlpatterns = [ path('application_name/', include('application_name.urls')), path('admin/', admin.site.urls), ]
接口的完整路径为host:port/application_name/guessGenderByName
2.4 接口调试
以下是 Java 通过 FeignClient 调用算法中心 guessGenderByName 方法代码:
// 请求对象封装 @Data @ApiModel(value = "通过姓名获取性别信息请求对象", description = "通过姓名获取性别信息请求对象封装") @Builder public class GuessGenderServiceReq { private String name; private int flag; } // Feign接口调用 @FeignClient(name = "AlgorithmCenterInterface", url = "${algorithm-center-service.url}:${algorithm-center-service.port}") public interface RemoteAlgorithmCenterService { /** * 根据姓名获取性别及姓名男性化女性化程度 * * @param req 中文姓名 和 flag 0 gender 1 prob other is all * @return 性别及可能性 */ @PostMapping("/application_name/guessGenderByName") String guessGenderByName(GuessGenderServiceReq req); } // 调用方法 algorithmCenterService.guessGenderByName(GuessGenderServiceReq.builder().name(name).flag(0).build());
使用 Postman 调用接口测试结果:
3.总结
仅作简单起步。