加入收藏 | 设为首页 | 会员中心 | 我要投稿 大庆站长网 (https://www.0459zz.com/)- 科技、智能边缘云、事件网格、云计算、站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django ORM性能优化 和 图片验证码

发布时间:2020-07-21 11:04:15 所属栏目:Python 来源:互联网
导读:一,ORM性能相关1. 关联外键, 只拿一次数据all_users = models.User.objects.all().values(name, age, role__name)2. 查外键会访问多次数据库, 用的时候注意, 只拿自己表中的字段, 别跨表all_users = models.User.objects.all()3. select_related(外键/一对一

= models.User.objects.all().values(,,2=3. select_related(外键/一对一) -->= models.User.objects.all().select_related(4. prefetch_related() -->= models.User.objects.all().prefetch_related(5. only() -->= models.User.objects.all().only(= models.User.objects.all().defer()

<span style="color: #0000ff;">def<span style="color: #000000;"> get_vcode():
tmp =<span style="color: #000000;"> []
<span style="color: #0000ff;">for i <span style="color: #0000ff;">in range(5<span style="color: #000000;">):
l = chr(random.randint(97,122)) <span style="color: #008000;">#<span style="color: #008000;"> 生成随机的小写字母
u = chr(random.randint(65,90)) <span style="color: #008000;">#<span style="color: #008000;"> 生成随机的大写字母
n = str(random.randint(0,9)) <span style="color: #008000;">#<span style="color: #008000;"> 生成一个随机的数字
<span style="color: #008000;">#<span style="color: #008000;"> 从上面三个随机选一个
r =<span style="color: #000000;"> random.choice([l,u,n])
tmp.append(r)
<span style="color: #0000ff;">return <span style="color: #800000;">""<span style="color: #000000;">.join(tmp)

<span style="color: #0000ff;">if <span style="color: #800080;">name == <span style="color: #800000;">'<span style="color: #800000;">main<span style="color: #800000;">'<span style="color: #000000;">:
ret =<span style="color: #000000;"> get_vcode()
<span style="color: #0000ff;">print(ret)

PIL <span style="color: #0000ff;">def<span style="color: #000000;"> random_color():
<span style="color: #0000ff;">return random.randint(0,255),random.randint(0,255<span style="color: #000000;">)

<span style="color: #0000ff;">def<span style="color: #000000;"> vcode():
<span style="color: #008000;">#<span style="color: #008000;"> 创建一个随机颜色的图片对象
image_obj =<span style="color: #000000;"> Image.new(
<span style="color: #800000;">"<span style="color: #800000;">RGB<span style="color: #800000;">"<span style="color: #000000;">,(250,35<span style="color: #000000;">),random_color()
)

with open(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;static/imgs/vcode.png</span><span style="color: #800000;"&gt;"</span>,<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;wb</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;) as f1:
    image_obj.save(f1,format</span>=<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;PNG</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;)

<span style="color: #0000ff;">def<span style="color: #000000;"> vcode():
<span style="color: #008000;">#<span style="color: #008000;"> 创建一个随机颜色的图片对象
image_obj =<span style="color: #000000;"> Image.new(
<span style="color: #800000;">"<span style="color: #800000;">RGB<span style="color: #800000;">"<span style="color: #000000;">,random_color()
)

</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 在该图片对象上生成一个画笔对象</span>
draw_obj =<span style="color: #000000;"&gt; ImageDraw.Draw(image_obj)
</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 加载一个字体对象</span>
font_obj = ImageFont.truetype(<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;static/font/kumo.ttf</span><span style="color: #800000;"&gt;'</span>,28<span style="color: #000000;"&gt;)
tmp </span>=<span style="color: #000000;"&gt; []
</span><span style="color: #0000ff;"&gt;for</span> i <span style="color: #0000ff;"&gt;in</span> range(5<span style="color: #000000;"&gt;):
    l </span>= chr(random.randint(97,n])
    draw_obj.text((i </span>* 45 + 30,0),r,fill=random_color(),font=<span style="color: #000000;"&gt;font_obj,)

with open(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;static/imgs/vcode.png</span><span style="color: #800000;"&gt;"</span>,format</span>=<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;PNG</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;)

<span style="color: #008000;">#<span style="color: #008000;"> 专门返回验证码图片的视图函数
<span style="color: #0000ff;">def<span style="color: #000000;"> vcode(request):
<span style="color: #0000ff;">from PIL <span style="color: #0000ff;">import<span style="color: #000000;"> Image,ImageFont

</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 定义一个生成随机颜色代码的函数</span>
<span style="color: #0000ff;"&gt;def</span><span style="color: #000000;"&gt; random_color():
    </span><span style="color: #0000ff;"&gt;return</span> random.randint(0,255<span style="color: #000000;"&gt;)

</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 创建一个随机颜色的图片对象</span>
image_obj =<span style="color: #000000;"&gt; Image.new(
    </span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;RGB</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;,random_color()
)
</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 在该图片对象上生成一个画笔对象</span>
draw_obj =<span style="color: #000000;"&gt; ImageDraw.Draw(image_obj)
</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 加载一个字体对象</span>
font_obj = ImageFont.truetype(<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;static/font/kumo.ttf</span><span style="color: #800000;"&gt;'</span>,n])
    </span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; 将选中过的那个字符写到图片上</span>
    draw_obj.text((40 * i + 30,font=<span style="color: #000000;"&gt;font_obj)
    tmp.append(r)

</span><span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; # 加干扰线</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; width = 250  # 图片宽度(防止越界)</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; height = 35</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt; for i in range(5):</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;     x1 = random.randint(0,width)</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;     x2 = random.randint(0,width)</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;     y1 = random.randint(0,height)</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;     y2 = random.randint(0,height)</span>
<span style="color: #008000;"&gt;#</span><span style="color: #008000;"&gt;     draw_obj.line((x1,y1,x2,y2),fill=random_color())</span>
<span style="color: #008000;"&gt;#

(编辑:大庆站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读