この例では、ダイナミックアクセスコードであり、以下の導出プロセスに基づいて実施枕Djangoフレームワークモジュールが実現されます。
ルートとビュー機能を作成し、ルートにget_codeルートを追加、表示、機能するようにしようとget_codeを作成します。
- 派生:バイナリデータを送信してローカルファイルを開きます
view.py:
def get_code(request):
with open(r'002_wLZfWbk.jpg','rb') as f:
data = f.read()
return HttpResponse(data)
get_code.html:
<img src="/get_code/" alt="" width="310" height="60" id="id_img">
一例として上述のHttpResponseバイナリデータは、遠位端に送信されてもよいです。
- 導出II:動的に生成された画像データを送信するバイナリ
イメージを動的に生成するので、ここでは達成するために枕モジュールを使用し、する必要がpip install pillow
ピローブロックをインストールします。
公式文書:https://pillow.readthedocs.io/en/stable/
枕は、PILから来ているので、インポートライブラリのインポートPIL
# Image用来生成图片
from PIL import Image
def get_code(request):
# img_obj = Image.new('RGB',(310,60),'green') # 第二个参数规定生成的图片大小,要与前端设置的一样
img_obj = Image.new('RGB',(310,60),(128,128,128)) # 第三个参数既可以传颜色英文也可以传rgb参数
# 先保存成文件
with open('demo.png','wb') as f:
img_obj.save(f)
# 再以二进制模式读取发送数据
with open('demo.png','rb') as f:
data = f.read()
return HttpResponse(data)
- 導出3:動的な変更カラー写真、もはや文書の形式に依存して保存されていない画像
あなたが少しを生成したいファイルを保存しない、別のモジュールのIOが必要とされます
from PIL import Image
from io import BytesIO
# 能够帮你保存数据 并且在取的时候会以二进制的形式返回给你
# 随机生成rgb参数
def get_random():
return random.randint(0,255),random.randint(0,255),random.randint(0,255)
def get_code(request):
img_obj = Image.new('RGB',(310,60),get_random())
# 生成一个BytesIO对象
io_obj = BytesIO() # 将这个对象看成文件句柄
img_obj.save(io_obj,'png') # 将图片数据存入内存管理器中,注意需要指定图片格式
return HttpResponse(io_obj.getvalue()) # 将保存的数据以二进制的数据返回出来
- 4にプッシュ:アルティメットエディションを
# Image用来生成图片,ImageDraw在图片上写'字',ImageFont字体样式,ImageFilter图片模糊处理
from PIL import Image,ImageDraw,ImageFont,ImageFilter
# 能够保存数据 并且在取的时候会以二进制的形式返回
from io import BytesIO
import random
# 随机生成rgb参数
def get_random():
return random.randint(0,255),random.randint(0,255),random.randint(0,255)
def get_code(request):
# 生成图片对象
img_obj = Image.new('RGB',(310,60),get_random())
# 生成一个画笔对象
img_draw = ImageDraw.Draw(img_obj) # 你的画笔就可以在该图片上为所欲为
# 生成一个字体对象
img_font = ImageFont.truetype('mo.ttf',45) # 在文件夹中添加ttf字体文件,35代表字体文件
# 随机5位验证码: 数字+小写字母+大写字母
code = '' # 定义一个变量存储最终验证码
for i in range(5):
random_int = str(random.randint(0,9))
random_lower = chr(random.randint(97,122))
random_upper = chr(random.randint(65,90))
temp_code = random.choice([random_int,random_lower,random_upper])
# 将产生的字一个一个的写到图片上
img_draw.text((60+i*45,0),temp_code,get_random(),img_font) # (60+i*45,0)规定字在图片上的位置
# 将生成验证码记录,在实际项目中可以将验证码保存在session表中,方便后面的验证。
code += temp_code
print(code)
# 生成io对象
io_obj = BytesIO()
# 对图片模糊
img_obj = img_obj.filter(ImageFilter.BoxBlur(radius=2))
# 将图片数据存入内存管理器中,注意需要指定图片格式
img_obj.save(io_obj,'png')
# 将保存的数据以二进制的数据返回出来
return HttpResponse(io_obj.getvalue())
フロントエンドコード
<div>
<img src="/get_code/" alt="" width="315" height="60" id="id_img">
</div>
<script>
//通过点击图片,图片会进行更新
var func = function (){
let old_path = $('#id_img').attr('src');
$('#id_img').attr('src', old_path + '?')
};
$('#id_img').click(function () {
func();
});
</script>