- 需求
客户端上传一张图片到服务器,从服务器请求图片识别的结果。
- Django 安装
1、使用 pip 安装 Django:pip install Django==2.2.4
2、检查是否安装成功:
import django django.VERSION
-
服务器搭建
1、新建一个 project,名称为 mysite:django-admin startproject mysite
如果创建成功, 我们会看到如下的目录结构 :
mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
2、进入外层 mysite目录,新建一个 app,名称为 learn:
python manage.py startapp learn
新生成的文件夹 learn目录结构为:
learn ├── __init__.py ├── admin.py 后台相关的设置 ├── apps.py app相关的设置文件 ├── migrations 数据库变更相关 │ └── __init__.py ├── models.py 数据库模型相关 ├── tests.py 单元测试 └── views.py 视图逻辑
3、将新定义的 app加到 settings.py中的 INSTALL_APPS中:
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'learn', # 注意添加了这一行 ]
4、在 views.py中定义视图函数:
# -*- coding: utf-8 -*- from django.shortcuts import render from django.http import HttpResponse import random # Create your views here. def discern(request):#请求结果 return HttpResponse(random.randint(1,4))#模拟一个随机值 def upload(request):#传输文件 if request.method == "POST": File = request.FILES.get("file", None) if File is None: return HttpResponse("请选择需要上传的图片") else: with open(File.name, 'wb+') as f: for chunk in File.chunks(): f.write(chunk) return HttpResponse("OK") else: return HttpResponse("请使用post方式上传")
5、在 urls.py中定义视图函数相关的URL:
from django.contrib import admin from django.conf.urls import url from django.urls import path from learn import views as learn_views urlpatterns = [ path('admin/', admin.site.urls), url('upload/',learn_views.upload,name='upload'), url('discern/',learn_views.discern,name='discern'), ]
6、启动服务:
python manage.py runserver 0.0.0.0:8000
启动成功显示信息如下:
-
客户端实现
import urllib.request as urllib2 import requests def mypost(url_mul,file): files = {'file':open(file,'rb')} r = requests.post(url_mul,files=files) return (r.text) if __name__ == "__main__": #post请求上传文件 state = mypost(url_mul="http://127.0.0.1:8000/upload/",file="test.jpg") print(state) #请求返回结果 rs = urllib2.urlopen('http://127.0.0.1:8000/discern/') data = rs.read().decode("utf-8") print(data)
-
运行客户端程序,新搭建的服务器应该会提示如下信息:
-
修改 settings.py文件中的属性 APPEND_SLASH 为“APPEND_SLASH = False”,并注释掉 MIDDLEWARE 属性中的 'django.middleware.csrf.CsrfViewMiddleware',重新运行客户端程序,得到正确返回结果:
修改 ALLOWED_HOSTS 属性为 “ALLOWED_HOSTS = ['*']”,使得可以通过真实的IP地址(非本地环回地址)访问Web服务端。