zoukankan      html  css  js  c++  java
  • 博客系统(其一)

    验证码功能:

    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 <数据库名>
  • 相关阅读:
    转 [Lucene.Net] 基本用法
    万商网与Alibaba等的比较
    B2B闯入者 新势力正在崛起
    项目管理随想一
    【转载】/proc目录中的重要信息
    文件名乱码转换器
    C函数调用中对入参取地址引发的问题
    编译通过的代码不算什么,一眼能看懂的代码才算好代码
    Handler使用
    删除system/app下的apk
  • 原文地址:https://www.cnblogs.com/tyh-tesla/p/10052711.html
Copyright © 2011-2022 走看看