django-驗證碼/靜態檔案處理

weixin_34234823發表於2018-03-21

(一)設定驗證碼  在views.py檔案裡定義驗證碼

#字型顏色隨機

def rndChar():

    return chr(random.randint(65, 90))

# 隨機顏色1:

def rndColor():

    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))

# 隨機顏色2:

def rndColor2():

    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))

def identifying(request):                                     -------------定義驗證碼

    width = 60 * 4                                              ---------定義寬

    height = 60                                                   ---------定義高

    image = Image.new('RGB', (width, height), (255, 255, 255))      ------定義一個新的圖片

    # 建立Font物件:

    font = ImageFont.truetype('LiberationSans-BoldItalic.ttf', 36)       -----定義字型

    # 建立Draw物件:

    draw = ImageDraw.Draw(image)           -------------------定義畫素

    # 填充每個畫素:

    for x in range(width):

        for y in range(height):

            draw.point((x, y), fill=rndColor())

    # 輸出文字:

    codes = ' '

    for t in range(4):

        code=rndChar()

        codes += code

        draw.text((60 * t + 10, 10), code, font=font, fill=rndColor2())

    # 模糊:

    image = image.filter(ImageFilter.BLUR)

    #將驗證碼字串儲存到session中                  ---------為了判斷使用者驗證碼輸入的是否正確

    request.session['codes'] = codes

    request.session.set_expiry(0)

    f=BytesIO()                                                 --------------圖片用位元組來儲存

    image.save(f,'jpeg')                                    ------------提交圖片

    return HttpResponse(f.getvalue(),'image/jpeg')              ----------獲取圖片,並定義圖片的格式

(二)在登入的方法裡驗證

#判斷驗證碼

    userverification=request.POST.get('identifying')

    codes=request.session['codes']

    print(codes)

    if userverification == None or codes.upper() != userverification.upper():      -----如果驗證碼為空或者不符合圖片

        context = {'userverification_error': '驗證碼輸入錯誤'}

        return render(request, 'user/login.html', context)

url='/user/identifying'

        function checkimg(abc) {

            abc.src=url+'?num='+new Date()

        }

(三)處理靜態檔案

 專案中的CSS、圖片、js都是靜態檔案

配置靜態檔案

(第一步)

在settings 檔案中定義靜態內容

STATIC_URL = '/static/'

STATICFILES_DIRS = [

    os.path.join(BASE_DIR, 'static'),

]

在專案根目錄下建立static目錄,再建立當前應用名稱的目錄

/static/myapp/

 在模板中可以使用硬編碼

/static/my_app/myexample.jpg

 在模板中可以使用static編碼

{ % load static from staticfiles %}

相關文章