From 92de40fe647588c0a0c666c20b224d77158e3db3 Mon Sep 17 00:00:00 2001 From: yangjian Date: Thu, 25 Jul 2019 21:47:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=B3=A8=E5=86=8C=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MONACO.TTF | Bin 0 -> 65704 bytes app_admin/check_code.py | 106 +++++++++++++++++++++++++++++++++ app_admin/urls.py | 1 + app_admin/views.py | 33 +++++++++- db.sqlite3 | Bin 348160 -> 348160 bytes template/app_doc/pro_list.html | 7 ++- template/register.html | 12 ++++ 7 files changed, 155 insertions(+), 4 deletions(-) create mode 100644 MONACO.TTF create mode 100644 app_admin/check_code.py diff --git a/MONACO.TTF b/MONACO.TTF new file mode 100644 index 0000000000000000000000000000000000000000..57217b3f03ca96361ef0b3d658e357bdda3154ab GIT binary patch literal 65704 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 =mDbAnbgjB%7t<+;rB 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 100 - chance: + draw.point((w, h), fill=(0, 0, 0)) + + def create_strs(): + '''绘制验证码字符''' + c_chars = get_chars() + strs = ' %s ' % ' '.join(c_chars) # 每个字符前后以空格隔开 + + font = ImageFont.truetype(font_type, font_size) + font_width, font_height = font.getsize(strs) + + draw.text(((width - font_width) / 3, (height - font_height) / 3), + strs, font=font, fill=fg_color) + + return ''.join(c_chars) + + if draw_lines: + create_lines() + if draw_points: + create_points() + strs = create_strs() + + # 图形扭曲参数 + params = [1 - float(random.randint(1, 2)) / 100, + 0, + 0, + 0, + 1 - float(random.randint(1, 10)) / 100, + float(random.randint(1, 2)) / 500, + 0.001, + float(random.randint(1, 2)) / 500 + ] + img = img.transform(size, Image.PERSPECTIVE, params) # 创建扭曲 + + img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强(阈值更大) + + return img, strs \ No newline at end of file diff --git a/app_admin/urls.py b/app_admin/urls.py index 0221ffc..9980227 100644 --- a/app_admin/urls.py +++ b/app_admin/urls.py @@ -10,4 +10,5 @@ urlpatterns = [ path('project_manage/',views.admin_project,name='project_manage'), # 文集管理 path('doc_manage/',views.admin_doc,name='doc_manage'), # 文集管理 path('doctemp_manage/',views.admin_doctemp,name='doctemp_manage'), # 文集管理 + path('check_code/',views.check_code,name='check_code'), # 验证码 ] \ No newline at end of file diff --git a/app_admin/views.py b/app_admin/views.py index 5c7fbc3..cddb7ac 100644 --- a/app_admin/views.py +++ b/app_admin/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render,redirect -from django.http.response import JsonResponse +from django.http.response import JsonResponse,HttpResponse from django.contrib.auth import authenticate,login,logout # 认证相关方法 from django.contrib.auth.models import User # Django默认用户模型 from django.contrib.auth.decorators import login_required # 登录需求装饰器 @@ -9,6 +9,18 @@ import json import datetime from app_doc.models import * +# 返回验证码图片 +def check_code(request): + import io + from . import check_code as CheckCode + + stream = io.BytesIO() + # img图片对象,code在图像中写的内容 + img, code = CheckCode.create_validate_code() + img.save(stream, "png") + # 图片页面中显示,立即把session中的CheckCode更改为目前的随机字符串值 + request.session["CheckCode"] = code + return HttpResponse(stream.getvalue()) # 登录视图 def log_in(request): @@ -48,6 +60,7 @@ def register(request): username = request.POST.get('username',None) email = request.POST.get('email',None) password = request.POST.get('password',None) + checkcode = request.POST.get("check_code",None) if username and email and password: if '@'in email: email_exit = User.objects.filter(email=email) @@ -61,11 +74,27 @@ def register(request): elif len(password) < 6: errormsg = '密码必须大于等于6位!' return render(request, 'register.html', locals()) + elif checkcode != request.session['CheckCode'].lower(): + errormsg = "验证码错误" + return render(request, 'register.html', locals()) else: - pass + # 创建用户 + user = User.objects.create_user(username=username, email=email, password=password) + user.save() + # 登录用户 + user = authenticate(username=username, password=password) + if user.is_active: + login(request, user) + return redirect('/') + else: + errormsg = '用户被禁用!' + return render(request, 'register.html', locals()) else: errormsg = '请输入正确的电子邮箱格式!' return render(request, 'register.html', locals()) + else: + errormsg = "请检查输入值" + return render(request, 'register.html', locals()) # 注销 diff --git a/db.sqlite3 b/db.sqlite3 index 1a58837d2acbb6fea46644f71a226bb323f81255..a02c0b850ce4f48c7d552d86f22a52500c10129e 100644 GIT binary patch delta 2291 zcmc&#ZD`U5<6czVUW7~nwwY~StRa=d@Bu(({Ond3&ZXdMG%Uv$HytGNv z9E_OaUdUMnrd>0SEalw z5;UWph+E+oeKY7xIg92vBcUMCQTiB9&#DJt(MTfg@roQ0SPVTuguuoKVuYY@5?}e|eavoyZ&~2q;Ct{b z_Zqe@TV;9L-p-vS z-3*qd8MIU^WJ>eV9AQwD7GK0vl$tG|IA&-(%j>*^6SSP17>-rx-m zl}%q#kU}M1=TJeCQQqW}vYw*@DL$)6{Co&wQp$9I3h1gCl0wO2o?t?b%&eSW>#n3z z0X>`KrUMIsG^52LQ`rbUV=57lVfge}Y^JDqz%PxdyeyHKxiYEGVI&eY(#d0n4~_ZN z;^VwYt|&^NlCETjn~=p2p|C!U_XL?%yIsSGt7(i@KS-2uQS|b3*SesE zxdpRODxqX1L&f9SaxvzbU&xTiLfN$#(==3IV<`>@#YtXYN?=n6XNK|Sx4^0JxXwT8aVK%!TEz}S&SKizu8WeRCF(B@s!4iiY7=?fS?Qr2QXRO zMB5FwCPL#IBlypj<231Vp?06;y(TTSGFONrOc9$e7YcI;ipnL5MxLH0^ztlI$S27E zn%2&BE8;*v62TC9`JfG0vE5zEuR+c_a(^dOu~=G~GV=@BOfoq)Z&v$&Ujg~8{L1Me zTo%(Q*=SCIigBiF3X+oIbvGD#(0pAjam^l!Gbvu;FfcW^@}#7d<_1Wo!%;Mld|K1i zeg&<^Xxd_FX>%aEFla_XP&;mE$cVGh^gzvz2z-a`-!67RLZ6#zE_-ik#TR5e=W~@Q43~jNL z?ag{CXC63fx7VQkj&?X<0f)dF@HO~DI05^?Q9!|mCpOzv8^-Oox}nW(w^o_Gd3)v6 zU!Hf`o=*Jxq;@r~J%T(ppX;}D_IK@DK^<)4_|3K(9owr9CZJx+p5?FhcDmi2)wfPG zu7BV59W<uKL#ca%{nu)MtpqW=kss=^w9}jP4_+y z4~=TrMD6Qj+e?khx7&``YPk-p-3CNuKfl}7eRnqnE(rh}00Y;kavk2-kl2(YF3zU&C>8J^r>8`x}l=oAJXdt-_NH z$7(Zv^hqlY)T$xdc!N7@{k_LNIOu##z2Sem?J@)f8@62ABlu%$&gy7bS8ab>`V&_> B!{Yz| delta 1311 zcmbV~Z)h839LMju=MvJS%S~{D>RclRY{lgMB$qVVWR_hni{mcs7FQP;w##BJe=bRr ztCt3Zwsdb~id(?vP1U~8fvj6A2R;r#ruE%$R2hQK7o!aJq8n8a^o`c18NL&wJ@~+v z-vNw9G7z)`U9>A1`RXn)MTHtvRAg<@az-tsE;)4n0Et$Yv$ zuZTSP{N+r`Y6}yuALlL6e_S*(DXtNVRHxgi$%#<3m}n&=jf>PPwdP1oEH_%F84*qv zD*Ou~FT?_TG$2YoJ{0GpaWNF+!=aee`Tj%E4cT>y{exX+H|)p8Z?pFLazD>f6vcR4 zl=o|ot5?}GZwq_>bi3vbF%EU!F^ncRfzReQ_JcEXhn(F~tkJAhi^a2zHgBD+Oqq?z zLUl-gqh?8^aC<76*TjUSmR^>!nMzqLC9G`nL`9QNm9w&~a8LUh79oymo> z#%L&2{deo303Y!QVqE0of)tDiQaBp3=O4cLTX#j)pjgaaVh#3Zviunq8Jpla|Nrdb z^g|VNEWR1S%LiJU;6{aX>$xHr&^PHFJpZhl2Gd$cg`*LW=MbA%Xli zV7hOR$N_>#2ocC7D2Wik7j8ha=H5dz@Z6+4H_7Y#%7Y8%pwt~NW2R1Tu^@rg=IF!d zNS)Dn-8AcQj2gn#e8 z)rGHKg3E5S^abO^g}3Pi8Ymci!#wLm+GXh8`QX|2=+=(A@PPvJKE30%?Evgub!qtE z75LQdPV7eBgTA~9`*wadiATjF*We03^-0FF{nC;c+-9~sXk^gQi@7EGJBWU{Mn8@M h1CHKp{}=}Mh>wF&$6s)}kiy{iZXrnumlv6pe*ncfu!H~r diff --git a/template/app_doc/pro_list.html b/template/app_doc/pro_list.html index 4f013a6..b1e8f8b 100644 --- a/template/app_doc/pro_list.html +++ b/template/app_doc/pro_list.html @@ -55,9 +55,12 @@
-
《{{ p.name }}》
+
{{ p.name }} +
- {{ p.intro }} +

作者:{{p.create_user}}

+

简介:{{ p.intro }}

+

diff --git a/template/register.html b/template/register.html index 822527c..25472fb 100644 --- a/template/register.html +++ b/template/register.html @@ -57,6 +57,18 @@
+
+
+ + + +
+