Form:
#!/usr/bin/env python # -*- coding:utf-8 -*- from django.core.exceptions import ValidationError from django import forms as django_forms from django.forms import fields as django_fields from django.forms import widgets as django_widgets from repository import models from .base import BaseForm class LoginForm(BaseForm, django_forms.Form): # username = django_fields.CharField( # min_length=6, # max_length=20, # error_messages={'required': '用户名不能为空.', 'min_length': "用户名长度不能小于6个字符", 'max_length': "用户名长度不能大于32个字符"} # ) username = django_fields.CharField() # password = django_fields.RegexField( # '^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%\^\&\*\(\)])[0-9a-zA-Z!@#$\%\^\&\*\(\)]{8,32}$', # min_length=12, # max_length=32, # error_messages={'required': '密码不能为空.', # 'invalid': '密码必须包含数字,字母、特殊字符', # 'min_length': "密码长度不能小于8个字符", # 'max_length': "密码长度不能大于32个字符"} # ) password = django_fields.CharField() rmb = django_fields.IntegerField(required=False) check_code = django_fields.CharField( error_messages={'required': '验证码不能为空.'} ) def clean_check_code(self): if self.request.session.get('CheckCode').upper() != self.request.POST.get('check_code').upper(): raise ValidationError(message='验证码错误', code='invalid') class RegisterForm(BaseForm, django_forms.Form): username = django_fields.CharField() password = django_fields.CharField() confirm_pwd = django_fields.CharField() def clean(self): v1 = self.cleaned_data['password'] v2 = self.cleaned_data['confirm_pwd'] if v1 == v2: pass else: from django.core.exceptions import ValidationError,NON_FIELD_ERRORS raise ValidationError('密码输入不一致')
Views:
#!/usr/bin/env python # -*- coding:utf-8 -*- import json from io import BytesIO from django.shortcuts import HttpResponse from django.shortcuts import render from django.shortcuts import redirect from utils.check_code import create_validate_code from repository import models from ..forms.account import LoginForm def check_code(request): """ 验证码 :param request: :return: """ stream = BytesIO() img, code = create_validate_code() img.save(stream, 'PNG') request.session['CheckCode'] = code return HttpResponse(stream.getvalue()) def login(request): """ 登陆 :param request: :return: """ if request.method == 'GET': return render(request, 'login.html') elif request.method == 'POST': result = {'status': False, 'message': None, 'data': None} form = LoginForm(request=request, data=request.POST) if form.is_valid(): username = form.cleaned_data.get('username') password = form.cleaned_data.get('password') user_info = models.UserInfo.objects. \ filter(username=username, password=password). \ values('nid', 'nickname', 'username', 'email', 'avatar', 'blog__nid', 'blog__site').first() if not user_info: # result['message'] = {'__all__': '用户名或密码错误'} result['message'] = '用户名或密码错误' else: result['status'] = True request.session['user_info'] = user_info if form.cleaned_data.get('rmb'): request.session.set_expiry(60 * 60 * 24 * 30) else: print(form.errors) if 'check_code' in form.errors: result['message'] = '验证码错误或者过期' else: result['message'] = '用户名或密码错误' return HttpResponse(json.dumps(result)) def register(request): """ 注册 :param request: :return: """ return render(request, 'register.html') def logout(request): """ 注销 :param request: :return: """ request.session.clear() return redirect('/') def xiaoyun(request): if request.method == "GET": return render(request,'xiaoyun.html') else: input_code = request.POST.get('code') check_cd = request.session['check_code'] print(input_code,check_cd) return HttpResponse('...') def shizhengwen(request): # f = open('static/imgs/avatar/20130809170025.png','rb') # data = f.read() # f.close() f = BytesIO() img, code = create_validate_code() request.session['check_code'] = code img.save(f, 'PNG') # request.session['CheckCode'] = code return HttpResponse(f.getvalue()) # stream = BytesIO() # img, code = create_validate_code() # img.save(stream, 'PNG') # request.session['CheckCode'] = code # return HttpResponse(stream.getvalue()) return HttpResponse(data)
浙公网安备 33010602011771号