1、安装插件
(国内镜像地址)pip3 install pillow -i Simple Index
或 pip install pillo
(国内镜像地址)pip3 install django-simple-captcha==0.5.15 -i Simple Index
或 pip install django-simple-captcha
2、在settings里的apps里加入'captcha'
3、生成迁移文件:python3 manage.py makemigrations
4、迁移文件生成表:python3 manage.py migrate
5、在主路由里增加:path('captcha/', include('captcha.urls')),
6、在settings里最底下加入如下代码
#字母验证码
CAPTCHA_IMAGE_SIZE = (80, 30) # 设置 captcha 图片大小
CAPTCHA_LENGTH = 4 # 字符个数
CAPTCHA_TIMEOUT = 1 # 超时(minutes)
#加减乘除验证码
# CAPTCHA_OUTPUT_FORMAT = '%(image)s %(text_field)s %(hidden_field)s '
# CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null',
# 'captcha.helpers.noise_arcs', # 线
# 'captcha.helpers.noise_dots', # 点
# )
# CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
# CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
# CAPTCHA_TIMEOUT = 1
7、View.py里代码如下
class LoginForm(forms.Form):
'''
属性:
CharField:
max_length:该字段值的最大长度;
min-length:该字段值的最小长度;
required:这个字段是否为必须的,默认为必须的;
error_messages:某个条件验证失败时,给出的错误信息
EmailField:
error_messages的键:required、invaild
FloatField:
max_value:指定最大值
min_value:指定最小值
IntegerField:
max_value:指定最大值
min_value:指定最小值
error_messages的键:required、invalid、max_value、min_value
DateField
接收年月日
URLField
error_messages的键:required、invalid
常用验证器:
MaxValueValidator:验证最大值
MinValueValidator:验证最小值
MinLengthValidator:验证最小长度
MaxLengthValidator:验证最大长度
EmailValidator:验证是否为邮箱格式
URLValidator:验证是否为URL格式
RegexValidator:验证是否匹配所指定的正则表达式,用来实现更复杂的验证
举个例子:
URLField = forms.CharFiedld(validators=[validators.URLValidator(message="请输入格式正确的地址")]
'''
s_name = forms.CharField(min_length=2, label="用户账号", help_text="请输入用户账号" , error_messages={"required":"用户账号不能为空", "min_length":"用户账号长度不能小于2位"})
s_pass = forms.CharField(min_length=4, label="用户密码", help_text="请输入用户密码" , error_messages={"required":"用户密码不能为空", "min_length":"用户密码长度不能小于4位"}, widget=forms.PasswordInput)
captcha = CaptchaField(label="验证码", help_text="按右侧验证码图片进行填写" , error_messages={"required":"验证码不能为空"})
class Meta:
model = models.SceneUser_Manager
fields = ["s_name", "s_pass", "captcha"]
# 批量增加文本框或组件样式
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for s_name, field in self.fields.items():
field.widget.attrs = {"class":"form-control ,width", "placeholder": field.help_text}
def user_login(request):
if request.method == "GET":
form = LoginForm()
return render(request, 'login.html', {"form": form})
elif request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
_captcha = request.POST.get("captcha", None)
_captcha_check = request.POST.get("hashkey", None)
if _captcha, _captcha_check:
print("Login ok")
else:
return render(request, 'login.html', {"form": form})
8、login.html里的代码如下
{{ form.captcha }}
{{ form.captcha.errors.0 }}
9、效果
10、以下是配置属性可以在setting.py当中进行全局配置,也可以在单个模块里进行局部配置
CAPTCHA_FONT_PATH:用于呈现文本的字体文件的完整路径,文件可以是.TTF、.OTF格式。默认是fonts/Vera.ttf
CAPTCHA_FONT_SIZE:字体的像素大小,默认为22
CAPTCHA_IMAGE_SIZE:以生成的验证码像素为单位的图像大小,指定为元组(宽度,高度)。默认为None
CAPTCHA_LITTER_ROTATION:在此区间内的随机旋转文本中的字符。默认为(-35, 35)
CAPTCHA_BACKGROUND_COLOR:验证码背景颜色,可以表示为html风格的#rrggbb, rgb(red,green,blue),又或者常见的html名字,例如red。默认为#ffffff
CAPTCHA_FOREGROUND_COLOR:验证码前景色,默认为#001100
CAPTCHA_CHALLENGE_FUNCT:用于显示验证码内容与结果的可调用对象。
CAPTCHA_MATH_CHALLENGE_OPERATOR:在使用math_challenge时,允许您选择乘法运算符。例如采用"x"代替。默认为*
CAPTCHA_NOISE_FUNCTIONS:图像过滤器。可调用对象的字符串列表,以PIL Image对象作为参数输入,修改并返回它。
CAPTCHA_WORDS_DICTIONARY:包含单词列表的文件目录。只有当CAPTCHA_CHALLENGE_FUNCT设置为captcha.helpers.word_challenge或captcha.helpers.huge_words_and_punctuation_challenge时需要。默认为/usr/share/dict/words
CAPTCHA_FLITE_PATH:音频读取器所在目录。定义时,将自动读取验证码。默认为None
CAPTCHA_TIMEOUT:验证码的有效期,单位为分钟。默认为5
CAPTCHA_LENGTH:用于设置生成的验证码的长度,只有当CAPTCHA_CHALLENGE_FUNCT设置为captcha.helpers.random_char_challenge时需要。默认为4
CAPTCHA_DICTIONARY_MIN_LENGTH:控制从CAPTCHA_WORDS_DICTIONARY目录中随机抽取的单词的最小长度,只有当设置为captcha.helpers.word_challenge或captcha.helpers.huge_words_and_punctuation_challenge时需要。默认为0
CAPTCHA_DICTIONARY_MAX_LENGTH:控制从CAPTCHA_WORDS_DICTIONARY目录中随机抽取的单词的最大长度,只有当设置为captcha.helpers.word_challenge或captcha.helpers.huge_words_and_punctuation_challenge时需要。默认为99
CAPTCHA_TEST_MODE:当设置为True时,字符串PASSED在任何情况下将被接受为对任何验证码的有效响应。用于测试目的。默认为False
11、最新版的django-simple-captcha不是CaptchaField(),而是CaptchaFieldClass()