画像検証コードを使用してログインするにはDjangoプロジェクト

アプリケーションuntils絵パッケージコード機能の下に置かれたフォルダを作成します。
validCode.pyファイルを作成すると、コードのルールを定義します

[URL =] [/ URL]
輸入randomdef get_random_color():リターン(random.randint(0、255)、random.randint(0、255)、random.randint(0、255))デフget_valid_code_img(リクエスト):#モード:PILのインポートイメージから、ImageDraw 、ImageFont IOインポートBytesIOインポートランダムIMGから= Image.new( "RGB"、(270、40)、カラー= get_random_color())#270 * 40高い、無作為抽出の背景色= ImageDraw.Draw(広いキャンバスを生成します(random_num = STR(random.randint 0:IMG)#(5)の範囲でiについて "" = kumo_font = ImageFont.truetype( "静的/フォント/ kumo.ttf"、サイズ= 32)#フォントサイズvalid_code_strをペイントしますZランダムBのrandom_upper_alpha = CHR(random.randint(65、90))#Aに、乱数小文字9))#0-9 9 random_low_alpha = CHR(random.randint(97、122))#AをランダムQ random_char = random.choice([random_num、random_low_alpha、random_upper_alpha])にZ大文字#2 draw.text((私は50 + 20 *5)、random_char、get_random_color()、フォント= kumo_font)の範囲でiについてのコードvalid_code_str + = random_char#85656幅= 270高さ= 40保存長方形の文字列には##ライト(10):#1 draw.point([ random.randint(0、幅)、random.randint(0、高さ)] = get_random_colorを埋める())#ビデオドットX = random.randint(0、幅)Y = random.randint(0、高さ)を描きます.ARC((X、Y、X + 4、Y + 4)、0、90、= get_random_colorを埋める())#小さなセグメントますrequest.session [ "valid_code_str"] = valid_code_str F = BytesIO()img.save(F 、 "PNG")#pngデータ= f.getvalue()戻り値のデータ[URL =]、= get_random_color())#画小点X = random.randint(0、幅)Y = random.randint(0、高さ)draw.arc((X、Y、X + 4、Y + 4)、0を埋めます90、= get_random_color())#小线段ますrequest.session [ "valid_code_str"] = valid_code_str F = BytesIO()img.save(F、 "PNG")#pngデータ= f.getvalue()戻り値のデータ[URLを埋めます= ]、= get_random_color())#画小点X = random.randint(0、幅)Y = random.randint(0、高さ)draw.arc((X、Y、X + 4、Y + 4)、0を埋めます90、= get_random_color())#小线段ますrequest.session [ "valid_code_str"] = valid_code_str F = BytesIO()img.save(F、 "PNG")#pngデータ= f.getvalue()戻り値のデータ[URLを埋めます= ][/ URL]

内蔵ルート

#ログパス( 'ログイン/'、login.login、NAME = 'ログイン')、#認証コードre_path( 'get_valid_code_img /'、login.get_valid_code_img、NAME = 'get_valid_code_img')、

メソッドをバックライト

[URL =] [/ URL]
blog.utilsから導入django.shortcutsからメソッドをvalidCodeの##のカスタム・コード・ページをバックインポートdjango.contrib.auth.hashersからハッシュ化され、レンダリングのHttpResponse、リダイレクト#をインポートするデータベースをインポートblog.modelsからmake_password、check_password番号をインポート記事、コメント、メンバー、賛美、ウェブ、画像番号着陸デフログイン(リクエスト):RESを= { '状態':なし、 '情報':なし} request.method場合== 'POST':valid_code = request.POST。 ( "valid_code")valid_code_str = request.session.get( "valid_code_str")プリント(valid_code、valid_code_str)を取得valid_code.upper()== valid_code_str.upper()の場合:#照会し、ユーザーとパスワードが正しいユーザ名です= request.POST .get( 'ユーザ名')PWD = request.POST.get( 'PWD')username_obj = Member.objects.filter(MEMBER_NAME =ユーザー名)1次回()username_objない場合:RES [ 'ステータス'] = 3つのRES [ '情報']のHttpResponse(json.dumps(RES))check_password(PWD、username_obj.member_pwd)場合、戻り= '存在しないユーザ名':RESを[ 'ステータス'] = 1つのRES [ '情報'] = 'ログイン成功' ますrequest.session [ 'MEMBER_NAME'] =ユーザー名ますrequest.session [ 'MEMBER_ID'] = Member.objects.filter(MEMBER_NAME =ユーザー名)1次回()。MEMBER_ID response_new =のHttpResponse(JSON .dumps(RES))#この結果は、Ajax他response_new返し、フロントデスクに教える:RES [ '状態'] = 0のres [ '情報'] = 'ID /パスワードエラー' リターンのHttpResponse(json.dumps(RES)を)他:RES [ '状態'] = 2つのres [ '情報'] = 'エラーコード'(img_data = validCode.get_valid_code_img(リクエスト)はHttpResponseを返すimg_dataを:のHttpResponseを返す(json.dumps(RES))は#生成图片验证码デフget_valid_code_img(リクエスト)(地元の人々は()、「ブログ/ login.htmlとの要求を)レンダリングを返します)[URL =][/ URL]

フロントエンドログインフォーム

[URL =] [/ URL]
{#登陆的表单#} <フォームアクション= "{%のURL 'ブログ:ログイン' %}" METHOD = "POST" ID = "ログイン">の<input type = "text"のクラス= "" /> <入力タイプ= "パスワード"クラス= "パスワード"名前= "PWD"プレースホルダ= "パスワード"が必要= "" /> {%必要= "名前"名前= "ユーザ名"プレースホルダ= "ユーザ名" csrf_token%}の<input type = "text"の名= "valid_code"プレースホルダ= "验证码"> <IMG幅= "270"高さ= "36" ID = "valid_code_img" SRC = "/ブログ/ get_valid_code_img /" ALT = "" onclickの= "this.src = '/ブログ/ get_valid_code_img /?' + Math.random()"> <divのクラスには、= "ログイン-agileitsボトム"><H6> <a href="javascript:;" type="button" id="onsubmit">ログインする</a> </ H6> </ div> </フォーム> {#ログインフォームエンド#} [URL =] [/ URL]

jqueryののフロントエンドは、ログインフォームを送信します

[URL =] [/ URL]
{#登陆的jqueryの#} $(ドキュメント).ready(関数(){$( '#1のonSubmit')。クリックしてください(関数(){$ .post( '/ブログ/ログイン/ 」、$( '#ログイン')([ステータス'](シリアライズ)、機能(データ){場合、データは' == 1){layer.msg(data.info); LOCATION.HREF =「{%のURL 'インデックス」%} ";}他{layer.msg(データ[ '情報'])}}、 'JSON')})}){#登陆的jqueryの结束#} [URL =] [/ URL]

結果ページ
 
行わ。

 

おすすめ

転載: www.cnblogs.com/heimaguangzhou/p/11756957.html