老师报错了

老师报错了

"""
生成验证码:
1. 准备素材
字体(ttf),文字内容,颜色,干扰线
2. 画验证码
pip install Pillow   、random
创建图片
记录文字内容,django session【服务器,python代码】
abcdefg  cookie 【浏览器】

(1) 第一次请求,cookie + session 对应关系生成
(2) 第二次请求,携带了cookie,找到对应的session【提交表单】
   请求带上验证码参数 与 session中的验证码进行比较
3. io文件流
BytesIO
"""

import random
import os
from PIL import Image,ImageDraw,ImageFont
from django.conf import settings
from io import BytesIO


class VerifyCode(object):
   """验证码类"""

   def __init__(self,dj_request):
       self.dj_requset = dj_request
       #验证码长度
       self.code_len = 4
       """验证码图片尺寸"""
       self.img_width = 100
       self.img_height = 30
       #Django 中session的名称
       self.session_key = 'verify_code'

   def gen_code(self):
       """生成验证码"""
       #1.使用随机数生成验证码
       code = self._get_vcode()
       #2.把验证码存在的session
       self.dj_requset.session[self.session_key] = code
       #3.准备随机元素(背景颜色、验证码文字的颜色、干扰线、)
       font_color = ['black', 'darkblue', 'darkred', 'brown', 'green', 'darkmagenta', 'cyan', 'darkcyan']
       #RGB随机背景色
       bg_color = (random.randrange(230, 255), random.randrange(230, 255), random.randrange(230, 255))
       # 字体路径
       font_path = os.path.join(settings.BASE_DIR, 'static', 'fonts', 'timesbi.ttf')

       #创建图片
       im =Image.new('RGB',(self.img_width,self.img_height),bg_color)
       draw =ImageDraw.Draw(im)

       #划干扰线
       #随机条数
       # 随机条数,到底画几条
       for i in range(random.randrange(1, int(self.code_len/2 + 1))):
           # 线条的颜色
           line_color = random.choice(font_color)
           # 线条的位置
           point = (
               random.randrange(0, self.img_width * 0.2),
               random.randrange(0, self.img_height),
               random.randrange(0, self.img_width - self.img_width * 0.2),
               random(0,self.img_height))
           #线条的宽度
           width = random.randrange(1 ,4)
           draw.line(point,fill=line_color,width=width)

   def _get_vcode(self):
       random_str = 'ABCDEFGHIKLMLNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz123456789'
       code_list = random.sample(list(random_str), self.code_len)
       code = ''.join(code_list)
       return code


   def validate_code(self,code):
       """验证验证码是否正确"""
       #1.转变大小写
       code = str(code).lower()
       vcode = self.dj_requset.session.get(self.session_key,None)
       #if vcode.lower() == code:
       #    return True
       #return False
       return vcode.lower() == code


if __name__ == '__main__':
   client = VerifyCode(None)
   client.gen_code()


老师报错了:

C:\envs\django1.11\Scripts\python.exe C:/Users/Administrator/Desktop/py_learn/django_mall/utils/verify.py

Traceback (most recent call last):

  File "C:/Users/Administrator/Desktop/py_learn/django_mall/utils/verify.py", line 91, in <module>

    client.gen_code()

  File "C:/Users/Administrator/Desktop/py_learn/django_mall/utils/verify.py", line 43, in gen_code

    self.dj_requset.session[self.session_key] = code

AttributeError: 'NoneType' object has no attribute 'session'


Process finished with exit code 1


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕美 2020-09-10 09:39:28

同学,你好。应使用random.randrange()返回随机数

http://img1.sycdn.imooc.com//climg/5f59839a09fa655409450304.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快~~~~


好帮手慕美 2020-09-09 09:50:02

同学,你好。同学是直接运行的verify.py文件吗?没有发送请求,因此会报错。同学可以启动django项目后在浏览器中输入对应的网址进行访问,从而生成验证码

http://img1.sycdn.imooc.com//climg/5f5834c6098cbedb05110155.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快~~~~

  • 提问者 Buck_messic #1
    老师报错了 TypeError at /sys/verify/code/ 'module' object is not callable Request Method: GET Request URL: http://127.0.0.1:8000/sys/verify/code/ Django Version: 1.11.18 Exception Type: TypeError Exception Value: 'module' object is not callable Exception Location: C:\Users\Administrator\Desktop\py_learn\django_mall\utils\verify.py in gen_code, line 68 Python Executable: C:\envs\django1.11\Scripts\python.exe Python Version: 3.8.2 Python Path: ['C:\\Users\\Administrator\\Desktop\\py_learn\\django_mall', 'C:\\envs\\django1.11\\Scripts\\python38.zip', 'd:\\python\\DLLs', 'd:\\python\\lib', 'd:\\python', 'C:\\envs\\django1.11', 'C:\\envs\\django1.11\\lib\\site-packages'] Server time: Wed, 9 Sep 2020 07:30:39 +0000
    2020-09-09 22:41:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.从网页搭建入门Python Web
  • 参与学习           人
  • 提交作业       218    份
  • 解答问题       3562    个

本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师