django mysql数据库及图片上传接口详解

  


  

  

我们在,django-rest-framework解析请求参数,文章中完成了接口文档到参数解析,一个完整的流程中还缺少对数据库的操作。本篇内容为django连接数据库,并编写一个图像表用来存储图片路径,编写图片上传接口和查看数据库中所有图片路径的接口。
  

  


  

  

django操作图片需要安装一个三方库叫做,枕头
  

        被python35   pip安装枕头   pip安装pymysql      

枕头这个库可以对图片进行操作,例如生成缩略图等等,非常强大。
  

  

pymysql是python3中用来连接数据库的一个库。
  

  

安装mysql数据库。安装MySQLWorkBench(作用和navicat一样,使用其他软件也可以)

  

 django mysql数据库及图片上传接口详解

  

选好点击应用提交创建新库。

  


  

  

一般图片不存数据库单独存储于某个路径,开发过程中就存在项目的某个路径下。
  

  

iOS开发中有个http 304问题。就是请求图片时,如果有缓存直接取缓存的图片。实际上苹果早已帮我们处理好了。实际开发中不需要针对http 304编写任何代码。
  

  

关于http 304的问题
  

  

这一篇文章写的非常详细了。
  

  

现在我们进行服务端编程,服务端是如何生成etag,最后修改这些参数的呢& # 63;
  

  

这个问题涉及到服务端框架对静态资源的管理方法。
  

  

在实际将项目部署到服务器上时,我们对动态资源和静态资源是分开管理的。我使用nginx + uwsgi部署,nginx管理静态资源,ETag之类的,nginx会自动生成,管理,不需要服务端程序员为此编写什么代码.....
  

  

图片上传接口,接收到图片文件,类型,大小校验,将图片保存到静态文件目录下,生成此图片的网址存储到mysql数据库。
  

  


  

  

修改models.py文件。
  

        django。数据库导入模型   进口日期时间   类图(models.Model):   # url=models.TextField (null=True)   形象=models.ImageField (upload_to=str(“图像/{时间}”.format(时间=str (datetime.date.today () .strftime (% Y % m/% d)))))   create_time=模型。DateTimeField (auto_now_add=True, null=True)   update_time=模型。DateTimeField (auto_now=True, null=True)      类元:   通过      

ImageField中的upload_to表示图片上传的具体路径。
  

  


  

  

修改设置。py文件中的数据库到下面的样式。名字是刚刚创建mysql新库的名称。用户密码是mysql用户的用户名和密码。mysql端口号默认为3306
  

        数据库={   “默认”:{   “发动机”:“django.db.backends.mysql”,   “名称”:“测试”,   “用户”:“根”,   “密码”:“111111”,   “主机”:127.0.0.1,   “端口”:“3306”,   }   }      

记得删除迁移目录下除了__init__。py之外的所有文件。
  

  

这些文件记录了对数据库定义个整个修改流程。切换数据库后这个流程和新库根本对不上号。需要全部删除。
  

  

修改与设置。py同一目录的__init__。py文件
  

  

添加两行代码
  

        进口pymysql   pymysql.install_as_MySQLdb ()      

cd到项目管理。py文件的路径下,运行
  

        被python35   python管理。py makemigrations   python管理。py迁移      3306年

使用mysqlworkbench连接打开之前创建的库可以看到表都已经被创建出来

  

 django mysql数据库及图片上传接口详解

  


  

        从rest_framework进口序列化器   类ImageUploadSerializer (serializers.Serializer):   令牌=serializers.CharField (max_length=100)   形象=serializers.ImageField ()      从得进口*   从django.views.decorators.csrf进口csrf_exempt   导入的时间   进口hashlib   类ImageUpload (APIView):   “‘   图片上传接口\ n   “http://127.0.0.1:8000/页面/uploadImage”(我简单写了个页面做提交)\ n   “‘      # coreapi_fields=(DocParam (name=傲钆啤?描述=傲钆啤?,   # DocParam (name=靶蜗蟆?描述=拔募?type='文件'),)      @csrf_exempt   def post(自我,请求,* args, * * kwargs):      形象=request.FILES('图像')   data=https://www.yisu.com/zixun/get_parameter_dic(请求)   #需要判断文件类型是否是图片。   串行=ImageUploadSerializer (data={“令牌”:数据(“令牌”),   “图像”:图像})   如果serial.is_valid ():   打印(“校验成功”)   其他:   返回JsonError(“参数校验失败”)      形象=serial.validated_data.get(“图像”)      new_image=图像(图像=图像)   imageName=str (new_image.image.name)   位置=str (imageName); (“。”)   扩展=imageName(地点:)      name=imageName(位置):   名称=名称+ str (time.time ())   md5=hashlib.md5 (namestring.encode (utf - 8)) .hexdigest ()   new_image.image.name=md5[10] +扩展   new_image.save ()         返回JsonResponse (data=https://www.yisu.com/zixun/new_image)

django mysql数据库及图片上传接口详解