media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管理界面
一、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自动化数据管理界面的更多相关文章
- django官方文档--对静态文件的管理
一.入门级理解: 在django中对静态文件的管理和模板(template)的思路是一样的.在模板的管理中django是把app用到 到的模板都保存到app目录下的templates子目录中. 静态文 ...
- Django配置静态文件(CSS\js)及Django调用JS、CSS、图片等静态文件
1 新建一项目: root@python:django-admin.py startproject csstest root@python:cd csstest root@python:ls csst ...
- nginx实现动态/静态文件缓存(week4_day1_part2)-技术流ken
nginx实现静态文件缓存实战 1.nginx静态文件缓存 如果要熟练使用nginx来实现文件的缓存,那下面的几个指令你必须要牢记于心 指令1:proxy_cache_path 作用:设置缓存数据的相 ...
- django 项目运行时media静态文件不能加载问题处理
一.检查网页中的加载路径 如果路径不正确,首选调整html路径(当然也可以调整文件路径或修改models中upload_to路径,但是不要轻易改): 二.重点: 如果加载路径和实践路径一致,请按以下步 ...
- vue 中如何对公共css、 js 方法进行单文件统一管理,全局调用
1.前言 最近,为公司开发交付的一个后台管理系统项目,我使用了 Vue 框架进行开发实践. 模块化.组件化.工程化的开发体验非常好.良好的 api,优雅的设计,对于工程师非常友好. 但是由于模块比较多 ...
- Linux 内核的文件 Cache 管理机制介绍
Linux 内核的文件 Cache 管理机制介绍 http://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完 ...
- Linux 内核的文件 Cache 管理机制介绍-ibm
https://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使 ...
- Django学习之十: staticfile 静态文件
目录 Django学习之十: staticfile 静态文件 理解阐述 静态文件 Django对静态文件的处理 其它方面 总结 Django学习之十: staticfile 静态文件 理解阐述 ...
- Django静态文件的加载以及STATIC_URL、 STATIC_ROOT 、STATICFILES_DIRS的区别
Djangon生产环境静态资源的处理 Django 关闭DEBUG模式后,就相当于是生产环境了. Django框架一旦作为生产环境,它的静态文件访问接口就不应该从Django框架中走,必须在Djang ...
随机推荐
- QT5中QByteArray转QString中文乱码
1.添加头文件 #include <QTextCodec> 2.用QTextCodec 设置格式转换 QByteArray barr; barr.insert(0,(char*)(pMsg ...
- <3>Cocos Creator编辑器基础
Cocos Creator编辑器界面主要窗口包含如下: * 资源管理器窗口 * 场景编辑器窗口 * 层级管理器窗口 * 属性检查器窗口 * 上方功能按钮 * 偏好设置 * 串口输出 * 预览和构建 1 ...
- Sql Server参数化查询之where in和like实现详解 [转]
文章导读 拼SQL实现where in查询 使用CHARINDEX或like实现where in 参数化 使用exec动态执行SQl实现where in 参数化 为每一个参数生成一个参数实现where ...
- html5-output的用法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- Thinking-Bear magic (计算几何)
---- 点我 ---- 题目大意: 给你一个正n边形及边长 a和一个正整数L, 求正多边形的面积s,若s大于L,则连接相邻两边的中点,形成新的正多边形,重复这个操作直至s小于L:如图: 正多边形的面 ...
- Java基础(basis)-----代码块详解
1.静态代码块 格式: static{ 内容..... } 随着类的加载而加载,而且只被加载一次 多个静态代码块之间按照顺序结构执行 优先其他各种代码块以及构造函数先执行 静态的代码块中只能执行静态的 ...
- 20165305 苏振龙 《Java 程序设计》第一次测试总结
第一个代码运行结果截图 功能:从1到5305进行求和 第二个代码运行结果截图 代码托管 第三个代码运行结果截图 (1)源文件的名字为Person.java (2)生成2个字节码文件,名字为Person ...
- 在Eclipse下配置算法(第四版)运行环境
第一步:配置Eclipse运行环境 Eclipse运行环境配置过程是很简单的,用过Eclipse进行java开发或学习的同学应该都很熟悉这个过程了. 配置过程: (1)系统环境:Windows7 64 ...
- JS神经网络deeplearn.js:浏览器端机器智能框架
JS神经网络deeplearn.js:浏览器端机器智能框架 通过 deeplearn.js,可以实现在浏览器中训练神经网络模型,也可在推理阶段运行预训练模型. deeplearn.js 以 TypeS ...
- redis安装集群的2种方式
redis主从只是数据的备份,当主宕机后不会自动切换从为主,需要手动切换从为主. 哨兵就可以自动切换从为主, 当主数据库遇到异常中断服务后,开发者可以通过手动的方式选择一个从数据库来升格为主数据库,以 ...