pip3 install pillow #PIL
登陆图片验证(未实现局部刷新)
详细:https://www.cnblogs.com/qiangyuge/p/8025168.html
def get_color():
import random
return (random.randint(0,255),random.randint(0,255),random.randint(0,255))
def get_text(request):
import random
a=str(random.randint(0,9))
b=chr(random.randint(65,90))
c=chr(random.randint(97,122))
d=''
for i in range(5):
d+=random.choice([a,b,c])
request.session['code']=d
return d
def img_code(request):
if request.method=='GET':
from PIL import ImageDraw, Image,ImageFont
from io import BytesIO
img=Image.new('RGB',(320,30),color=get_color())
#画字
img_draw=ImageDraw.Draw(img)
font=ImageFont.truetype('static/aa.TTF',size=25)
img_draw.text((120,-5),get_text(request),get_color(),font=font,)
f = BytesIO ()
img.save (f, 'png')
data = f.getvalue ()
return HttpResponse(data) **********************************************************************************
def get_valid_code(request):
    # 第一种方式
    # with open('static/img/lhf.jpg','rb') as f:
    #     # 图片二进制
    #     data=f.read()
    # return HttpResponse(data)
    # 第二种方式:随机生成一张图片
    # pip3 install Pillow
    # pillow 是一个图形处理的模块,功能很强强大
    # 生成一张图片,第一个参数是模式:RGB,第二个参数是图片大小,第三个参数是图片颜色
    # img = Image.new('RGB', (320, 35), color=get_random_color())
    # # 保存到本地
    # with open('valid_code.png', 'wb') as f:
    #     # 直接用img的save方法,第一个参数是空文件,第二个参数图片格式
    #     img.save(f, 'png')
    # # 打开文件,再返回
    # with open('valid_code.png', 'rb') as f:
    #     data = f.read()
    # return HttpResponse(data)
    # 第三种方式
    # 在内存中生成一个空文件(把它想象成 open('valid_code.png', 'wb') as f:)
    # 一个是在硬盘上,一个是在内存中
    # img = Image.new('RGB', (320, 35), color=get_random_color())
    # f = BytesIO()
    # # 把图片保存到f中
    # # 放到内存中,存取比较快,而且有自动清理
    # img.save(f, 'png')
    #
    # data = f.getvalue()
    # return HttpResponse(data)
    # 第四种方式,在图片上写文字
    img = Image.new('RGB', (320, 35), color=get_random_color())
    # 拿到画笔,把图片传入画笔
    img_draw=ImageDraw.Draw(img)
    # 生成一个字体对象,第一个参数是字体文件的路径,第二个参数是字体大小
    font=ImageFont.truetype('static/font/ss.TTF',size=25)
    # 第一个参数,xy的坐标,第二个参数:要写的文字,第三个参数:写文字的颜色,第四个参数:字体
    # 不同的字体是不同的ttf文件
    img_draw.text((0,0),'python',get_random_color(),font=font)
    f = BytesIO()
    # 把图片保存到f中
    # 放到内存中,存取比较快,而且有自动清理
    img.save(f, 'png')
    data = f.getvalue()
    return HttpResponse(data)
表设计
  User 用户表
   -nid
   -name
   -password
   -email
   -phone
   -avatar   用户头像
   -create_date    用户注册时间
   -blog
  Blog  个人站点表
   -nid
   -title         标题
   -site_name     站点url名
   -theme     主题
  category: 文章分类表
   -nid
   -title  
   -blog   跟blog一对多
   
  tag:(文章关键字)
   -nid
   -title
   -blog    跟blog一对多
   
  article 文章表
   -nid
   -title
   -desc    摘要
   -create_time    auto_add_now:当该条记录创建时,自动添加当前时间
   -content   文章内容
   
   -category    一对多
   -tag         多对多
   -blog        一对多
   
  commit 评论表
   -nid
   -user     哪个用户
   -article  对哪篇文章
   -content   评论了什么内容
   -commit_time  时间
   
   -parent_id
   如何实现根评论与子评论?
    -有同学分析,要再建一张表,跟commit是一对多的关系(不好)
    
    -如何用这一个表,表示出根评论和子评论?
     -再加一个字段,标志,给那条评论,评论的
   
   
   
 nid user    article   content    parent_id
  
 1 1        1         111         null
 2   2        1         222         null
 3   3      1         333          1
 4   4   1         444          3
 5   3        1         反弹         4
  UpandDown 点赞表
   -nid
   -user     哪个用户
   -article  对哪篇文章
   -is_up   点赞还是点踩
   

												

随机推荐

  1. HDU 1028(数字拆分 分治)

    题意是求所给的数能够被拆分成的不同组合数目. 方法有三种: 一.完全背包. 限制条件:所用数字不大于 n. 目标:求分解种数(组合出 n 的方法数). 令 dp[ i ][ j ] = x 表示 用前 ...

  2. Vue 架构

    vue 一.认识Vue 定义:一个构建数据驱动的 web 界面的渐进式框架 优点: 1.可以完全通过客户端浏览器渲染页面,服务器端只提供数据 2.方便构建单页面应用程序(SPA) 二.引入Vue &l ...

  3. Silverlight用户无法注册之MySql.Data.dll不一致

    本篇博文记录本人解决一个"用户无法注册"的问题的过程 1 问题描述: 用户可以删除:但不能注册,也不能修改权限: 图 1用户注册失败 图 2修改用户权限出错 2 解决过程 1)粗暴 ...

  4. lua 设置文件运行的环境

    背景 在一个lua文件中书写的代码, 使用的变量, 需要设置其运行环境. 目的: 1. 不破坏全局环境. 2. 限定文件所使用的环境, 作为沙箱功能. 解法 限定运行空间环境的文件: local m ...

  5. IDAPython教程(三)

    在过去两个部分中,我们已经讨论了使用IDAPython让逆向工程更容易一些.这一部分我们来看一下条件断点. 当在IDA中调试时,分析者经常会遇到希望可以在一个特殊的地址中断下来的情况,但这只有在一些特 ...

  6. 【Unity&C#】lambda函数

    以下两段代码等价. 未使用lambda函数的代码: private Button PB; private void Start() { PB = GameObject.Find("PButt ...

  7. solr 中文分词器IKAnalyzer和拼音分词器pinyin

    solr分词过程: Solr Admin中,选择Analysis,在FieldType中,选择text_en 左边框输入 “冬天到了天气冷了小明不想上学去了”,点击右边的按钮,发现对每个字都进行分词. ...

  8. oracle行转列函数以及一些窗口函数(PIVOT ,OVER)

    可以查看博客园上传的文件 pivot  除了要转成列的字段(classnum,classid)值不一样,其他值都应该相同,否则转的数据有问题

  9. group by having 判断重复的有几条数据

    判断字段id和字段zhi重复的条数 group by 和having 解释:前提必须了解sql语言中一种特殊的函数:聚合函数,--例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根 ...

  10. Web前端性能优化常见面试题

    一般说来,web前端指网站业务逻辑之前的部分,包括浏览器加载.网站视图模型.图片服务.CDN服务等,主要优化手段有浏览器访问.使用反向代理才.CDN等.1.减少http请求,合理浏览器缓存 2.启用压 ...