月光大保健

导航

博客系统(其一)

验证码功能:

 

def get_img(request):
    import random
    def get_random_img():
        return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

    from PIL import Image,ImageDraw,ImageFont
    img = Image.new("RGB",(270,40),color=get_random_img())
    #方式二
    # with open('valid_code.png','wb') as f:
    #     img.save(f)
    #
    # with open('valid_code.png','rb') as f:
    #     data = f.read()

    from io import BytesIO

    draw = ImageDraw.Draw(img)
    chandan_ttf = ImageFont.truetype("static/font/chandan.ttf",size=32)

    for i in range(0,5):
        num = str(random.randint(0,9))              #生成随机数字
        upper_alpha = chr(random.randint(65,90))    #生成随机大写字母
        low_alpha = chr(random.randint(97,122))     #生成随机小写字母
        now_char = random.choice([num,upper_alpha,low_alpha])   #使用随机列表从中选择

        draw.text((i*50,5),now_char,get_random_img(),font=chandan_ttf)      #draw.text(xy坐标,写的内容text,背景颜色,字体ttf)

    f = BytesIO()
    img.save(f,"png")
    data = f.getvalue()


    return HttpResponse(data)

 

储存验证码的值:通过session来储存,这样每个浏览器就会独享一个验证码

 request.session['valid_code_str'] = valid_code_str  #valid_code_str 为系统随机生成的验证码

这时再在index视图函数中取出该session

valid_code_str = request.session.get('valid_code_str')
        if valid_code_str.upper() == valid_code.upper():  #不区分大小写
            pass
        else:
            respon_dic['msg'] = "valid error"
        return  JsonResponse(respon_dic)

 

JsonResponse:可以帮你序列化
#如果这样返回,ajax还需要进行json解析
#views.py
return HttpResponse(json.dumps({"msg":"ok!"}))

#index.html
var data=json.parse(data)console.log(data.msg);


#如果这样返回,两边都不需要进行json的序列化与反序列化,ajax接受的直接是一个对象
#views.py
from django.http import JsonResponse
return JsonResponse({"msg":"ok!"})

#index.html
console.log(data.msg);

 

当用户选择文件时,选取当前用户的文件对象

$("#avater")[0].files[0]

File(244782) {name: "sedarkwallpaper.srx", lastModified: 1540678438189, lastModifiedDate: Sun Oct 28 2018 06:13:58 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 244782, …}

 

 

Media配置:降低耦合性

Django有两种静态文件:

1./static/  :css,js,img

2./media/ 用户上传文件

media配置之MEDI_ROOT

在settings.py 文件里面设置

 

MEDIA_ROOT = os.path.join(BASE_DIR,'media')

 

在Django中将会实现:

用户上传的文件将会下载至MEDIA_ROOT的media文件下,如果没有将会自动创建

 

 

media 配置之MEDIA_URL

  目的是浏览器可以直接访问到media数据

 

MEDIA_URL = '/media/'

 

在url.py中再设置:

from django.views.static import serve

re_path(r'media/(?P<path>.*)$',serve,{"document_root":settings.MEDIA_ROOT}),

 

使用Django里面的admin组件创建表:

在admin.py下:

首先是注册,将创建的表往admin里面注册,然后打开http://127.0.0.1:8000/admin,可以查看

 

from my_blog import models

admin.site.register(models.UserInfo)
admin.site.register(models.Article)
admin.site.register(models.Article2Tag)
admin.site.register(models.ArticleUpDown)
admin.site.register(models.Category)
admin.site.register(models.Blog)
admin.site.register(models.Comment)
admin.site.register(models.Tag)

 

 

vertical-align: -1px;   相对位移

 

个人站点的日期查询:

1.date_format;

============date,time,datetime================

create table t_mul(d date,t time,dt datetime);   //date:年月日;time:时分秒;datetime:年月日时分秒

insert into t_mul values(now(),now(),now());

 

select date_format(dt,"%Y/%m/%d") from t_mul

 

2.extra;

 

extra(self, select=None, where=None, params=None, tables=None,
              order_by=None, select_params=None):

 

参数select

date_list=models.Article.objects.filter(user=user).extra(select={"y_m_date":"date_format(create_time,'%%Y/%%m')"}).values("y_m_date").annotate(c=Count("nid")).values_list("y_m_date","c")

 

方式二:

# 方式2:

    # from django.db.models.functions import TruncMonth
    #
    # ret=models.Article.objects.filter(user=user).annotate(month=TruncMonth("create_time")).values("month").annotate(c=Count("nid")).values_list("month","c")
    # print("ret----->",ret)

 

 

<scrip>alrent('123')</script>

使用utf-8生成数据库

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

 

刪除數據庫

drop database <数据库名>

 

posted on 2018-12-02 11:32  月光大保健  阅读(146)  评论(0编辑  收藏  举报