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. Idea每次修改jsp都需要重启tomcat解决方法

  2. Golang入门教程(四)变量声明

    Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 一.Go的语言结构 1.Go的语言基础部分由这几个部分组成 包声明 引入包 函数 变量 语句&表达式 注释 比如下面这个简单 ...

  3. Spring boot 连接Redis实现HMSET操作

    这篇文章记录使用spring-boot-starter-redis访问Redis.Redis相关的的配置文件放在Resources目录下的application.yml文件中,如下所示: spring ...

  4. 完全使用UDP登录Linux

    ===============Mosh 登录器========================================= == 针对TCP被某些防火墙阻断的Linux机器, 该程序可以让你不使 ...

  5. Ext.net 的锁定列要集中放到前面

    如题,Ext.net的锁定列要集中放在一起,不然的话,在使用排序的时候,会引起实际排序列错乱比如有A,B,C,D四列,A,C锁定,最终显示为A C | B D,这个时候如果点击B时,发现排序跑到了C上 ...

  6. 微信小程序开发(4) 企业展示

    在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发企业内部宣传展示等功能. 一.小程序主体部分 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 1. 小程序逻辑 App({ ...

  7. Web获取客户端物理MAC地址(ocx插件)ActiveX控件

    主要是通过ActiveX控件 从本地获取到MAC地址,传入到浏览器打开的网页中,再提交到服务器. 具体详解与步骤看文档中: 文件实例包下载 DotNetFX 文件夹附件文件:(可能安装时需用) dot ...

  8. 基于TensorFlow Object Detection API进行相关开发的步骤

    *以下二/三.四步骤确保你当前的文件目录是以research文件夹为相对目录. 一/安装或升级protoc 查看protoc版本命令: protoc --version 如果发现版本低于2.6.0或运 ...

  9. html页面高度问题

    首先,上图 说明 1. clientHeight大部分浏览器对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,即然是指可看到内 ...

  10. ES6 基础

    转载自:ES6 基础 一.新的变量声明方式 let/const 与var不同,新的变量声明方式带来了一些不一样的特性,其中最重要的两个特性就是提供了块级作用域与不再具备变量提升. 通过2个简单的例子来 ...