最初のステップは枕をインストールすることです
ピップインストール枕
2番目のステップは、pythonパッケージを作成することです。__init__.pyファイルが必要であり、Windowsホストでフォントファイルを見つける必要があることに注意してください。私はsimhei.ttfです。
3番目のステップは、次の内容のpyファイルを作成することです。
インポートランダム から PILの輸入画像、ImageDraw、ImageFont インポート時間 インポートのOS インポート文字列 #キャプチャコード クラスキャプチャ(オブジェクト): #クラスは常に抽出する属性 #1 フォント位置 font_pathを= os.path.join(os.path.dirname(__FILE__)、' simhei.ttf ' ) 位数桁を生成します確認コード 数= 4 #生成されたコードは、幅と高さの サイズ=(100,40 ) #の背景色、RGB(赤、緑、青)を白色デフォルト BGCOLOR = (0,0,0) #ランダムフォントの色が random.seed(INT(時間。時間())) FONTCOLOR =(random.randint(200255)、random.randint(100255)、random.randint(100255 )) #のコードフォントサイズ fontsize = 20 #ランダム干渉ラインカラー LineColor =(random.randint(0、250)、random.randint(0,255)、random.randint(0、250 )) #干渉ライン参加するかどうかを DRAW_LINE = 真 位受信干渉ラインか draw_point = 真 #添加干渉ライン行数 line_number = 3 SOURCE = リスト(string.ascii_letters) のためのインデックス内の範囲(0,10 ): SOURCE.append(str(index)) #はランダム(英数字を含む)の文字列を生成するために使用されます #クラスメソッドとして定義されたが、プライベートで、直接ではなく、オブジェクトの外側を呼び出す @classmethod DEF gene_text(CLS): リターン 「」.join(random.sample(CLS .SOURCE、cls.number)) #受信干渉ラインについては @classmethod DEFの __gene_line (CLS、描画、幅、高さ)。 begin = (random.randint(0、width)、random.randint(0、height)) end = (random.randint(0、width)、random.randint(0、height)) draw.line([begin、end]、fill = cls.linecolor) #レシート迷惑の場合は @classmethod DEFの __gene_points (CLS、描画、point_chance、幅、高さ): チャンス = min(100 、max(0、int(point_chance))) for w in range(width): for h in range(height): tmp > random.randint(0,100 ) tmp> 100の場合 - チャンス: draw.point((W、H)、フィル = (0,0,0)) #はコードが生成 @classmethod DEFのgene_code(CLS)を: 幅、高さ = cls.size 画像 = Image.new(' RGBA '、(幅、高さ)、cls.bgcolor) #作成アートボード フォント= ImageFont.truetype(cls.font_path、cls.fontsize) #のコードフォントの 描画= ImageDraw.Draw(イメージ)#ブラシの作成 テキストcls.gene_textを=() #生成された文字列の font_width、font_height = font.getsize(テキスト) draw.text(((幅 - font_width)/ 2、(高- font_height)/ 2)、テキスト、フォント=フォント、塗りつぶし= cls.fontcolor) IF cls.draw_line: #1 トラバースLINE_NUMBER時間、ルートの線が描かれLINE_NUMBER 用 X- における範囲(0、cls.line_number): 。CLS __gene_line (描き、幅、高さ) #したい場合は、確認応答ノイズ IF cls.draw_point: cls。__gene_points(draw、10 、width、height) return(text、image)
4番目のステップは、ビューを作成することです
from utils.captcha.xfzcaptcha import Captcha from io import BytesIO def img_captcha(request): テキスト、画像 = Captcha.gene_code() #BytesIO対応する画像データを格納するためのダクトには、ストリーム OUT = BytesIO() #のBytesIO保存された写真の保存方法発着信画像 、Image.Save(OUT 「PNG 」) #最初の位置にファイルポインタBytesIO out.seek(0) 応答 =のHttpResponse(CONTENT_TYPE = ' イメージ/ PNG ' ) #レスポンスオブジェクトに保存BytesIOパイプから画像データを読み出し、 Response.Writeを(out.read()) response [ ' Content-length ' ] = out.tell() レスポンスを返す
5番目のステップは、URLルーティングマップを作成することです
urlpatterns = [ パス(' ログイン/ '、views.login_view、名前= ' ログイン' )、 パス(' ログアウト/ '、views.logout_view、名前= ' ログアウト' )、 パス(' img_captcha / '、views.img_captcha、名前= ' img_captcha ' )、 パス(' 登録/ '、views.register、名前= ' 登録' ) ]
6番目のステップでは、ログインページに表示される画像確認コードを確認します