ジャンゴプロジェクト生産確認コード写真

最初のステップは枕をインストールすることです

ピップインストール枕

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番目のステップでは、ログインページに表示される画像確認コードを確認します

 

おすすめ

転載: www.cnblogs.com/fengzi7314/p/12735506.html