media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4766字,纯文字阅读大概需要7分钟。
内容图文
![media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管](/upload/InfoBanner/zyjiaocheng/974/a714eff4174e4f9290f75d676b6e359f.jpg)
一、media
''' 1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务器会对外公开一下服务器静态资源 3. 对外公开的方式(配置url接口),在接口中返回指定的静态资源(如何批量操作) -- from django.views.static import serve -- url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}), '''
二、操作内存的流 - StringIO | BytesIO
from io import StringIO, BytesIO # 创建操作字符串的内存流 sf = StringIO() # 往内存中写 sf.write('hello') # 在内存中取 sf.getvalue() # 创建操作二进制的内存流 bf = BytesIO() # 往内存中写 bf.write('hello'.encode('utf-8')) # 在内存总取 bf.getvalue()
三、PIL:python图片操作库
# 1、生成图片(画板) from PIL import Image # 生成一个Image类对象(准图片):模式、尺寸、颜色 img = Image.new('RGB', (80, 80), color=(255, 0, 0)) # Type: Image # 将Image类对象采用具体格式放入具体的文件流中 bf = BytesIO() # eg: 内存字节流 img.save(bf, 'png') # 2、产生文字颜色字体(选择指定ttf并设置字体) from PIL import ImageFont # 产生某种ttf格式的30px大小文字 img_font = ImageFont.truetype('*.ttf', 30) # 3、画图,画笔(画点,线,字,圆) from PIL import ImageDraw # 在具体的Image对象上画图 img_draw = ImageDraw.Draw(img) # 画文字:xy轴、文本、颜色、ImageFont字体 img_draw.text((x, y), 'abc', 'red', img_font)
''' # 创建画板,保存在服务器本地 def save_local(): img = Image.new('RGB', (230, 32), (40, 20, 10)) # type: Image # 本地写流 wf = open('code.png', 'wb') # 将数据以指定格式丢给文件操作流 img.save(wf, 'png') with open('code.png', 'rb') as f: data = f.read() return data #创建画板保存到内存的流 img = Image.new('RGB', (230, 32), (40, 20, 10)) # type: Image bf = BytesIO() img.save(bf, 'png') # 在内存中取 sf.getvalue() '''
''' #创建六位随机验证码 from PIL import Image,ImageFont,ImageDraw from io import BytesIO import random #随机RGB元组 def random_RGB(min,max): return tuple([random.randint(min,max) for i in range(3)]) #随机产证六位验证码 def random_six_code(): code = '' #每一位均可以为字母大小写或数字 for i in range(6): tag = random.randint(1,3) #1.大写 2:小写 3:数字 if tag == 1: #转换为字符 ASCII表 code += chr(random.randint(65,90)) elif tag == 2: code += chr(random.randint(97,122)) else: #转换为字符串 code += str(random.randint(0,9)) return code #获取验证码 def login_code(request): #创建画板 img = Image.new('RGB',(230,32),random_RGB(150,255)) #设置ImageFont字体 img_font = ImageFont.truetype('static/font/kumo.ttf',size=30) #在画板中画字 img_draw = ImageDraw.Draw(img) #获取六位验证码 img_code = random_six_code() #将img_code存储到session中,与会话绑定用来完成验证码的验证 request.session['img_code'] = img_code #画文字:xy轴、文本、颜色、ImageFont字体 for i,ch in enumerate(img_code): img_draw.text((30+i*30,0),ch,random_RGB(0,150),img_font) bf = BytesIO() img.save(bf,'png') data = bf.getvalue() return HttpResponse(data) '''
前端解析二进制流图片(了解)
// 向指定url请求图片二进制流转换为blob:格式的src var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); // url xhr.responseType = "blob"; xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { var blod = this.response; var src = URL.createObjectURL(blod); // src } } }; xhr.send();
//完成前端点击验证码进行切换 $('#code').click(function () { url = '/login_code/'; //提供一个连接 var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); // url xhr.responseType = "blob"; xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { var blod = this.response; var src = URL.createObjectURL(blod); // src $('#code').attr('src',src) //拿到其结果 } } }; xhr.send(); })
四、Admin自动化数据管理界面
admin的概念
# Admin是Django自带的一个功能强大的自动化数据管理界面 # 被授权的用户(超级用户)可以直接在Admin中操作数据库 # Django提供了许多针对Admin的定制功能
配置并访问自动化数据管理界面
# 终端项目目录创建一个超级用户:python3 manage.py createsuperuser # eg:Username:root | Email:root@root.com | Password:1234qwer # 浏览器Admin入口:http://127.0.0.1:8000/admin # 设置Admin界面为中文环境:项目下settings.py,LANGUAGE_CODE = 'zh-Hans' # 简体:zh-hans | 繁体:zh-hant | 美式英语:en-us
将指定映射添加到自动化数据管理界面
# 应用下的admin.py中,注册映射对应关系的类 from . import models admin.site.register(models.Article) # 应用下的admin.py中,注册映射对应关系的表 from django.contrib import admin from blog.models import * admin.site.register(User) admin.site.register(Blog) admin.site.register(Article) admin.site.register(Category) admin.site.register(Tag) admin.site.register(UpOrDown) admin.site.register(Comment)
格式化界面字段显示名与表名
# 为应用下models.py映射关系类重写__str__方法 class Article(models.Model): title = models.CharField(max_length=32, default='Title', verbose_name="标题") #blank是admin界面该字段可以为空,null是数据库该字段可以为空 content = models.TextField(null=True, verbose_name="内容", blank=True) # 重写__str__方法,格式化该类实例对象的表示方式 def __str__(self): return self.title class Meta: verbose_name = "文章" #单数形式如何显示 verbose_name_plural = verbose_name #复数形式如何显示
内容总结
以上是互联网集市为您收集整理的media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管全部内容,希望文章能够帮你解决media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。