imagen del código de verificación de producción del proyecto django

El primer paso es instalar Pillow

pip install Pillow

El segundo paso es crear un paquete de Python. Tenga en cuenta que debe haber un archivo __init__.py, y luego busque un archivo de fuente en el host de Windows. Soy simhei.ttf

 

 

 El tercer paso es crear un archivo py con el siguiente contenido:

Importación aleatoria
 de la PIL importación de imágenes, ImageDraw, ImageFont
 importación Tiempo
 de importación OS
 Importación de cuerda 


# Captcha códigos 
de clase Captcha (Objeto):
     # la clase atributos para extraer Siempre 
    # posición de la fuente 
    font_path = os.path.join (os.path. dirname ( __FILE__ ), ' simhei.ttf ' )
     # generan varios códigos número 
    número =. 4 # códigos generados anchura y altura 
    size = (100,40 )
     # color de fondo, el RGB blanco predeterminado (rojo, verde, azul ) 
    bgcolor = (0,0,0)
     #
    Random color de la fuente 
    random.seed (int (el time.time ())) 
    fontcolor = (el random.randint (200255), el random.randint (100255), el random.randint (100,255 ))
     # códigos de tamaño de la fuente 
    fontSize = 20 es # estocástico color de interferencia línea 
    LineColor = (el random.randint (0, 250), el random.randint (0255), el random.randint (0, 250 ))
     # si unirse a la línea de interferencia 
    draw_line = Verdadero
     # si de líneas de interferencia recibo 
    draw_point = Verdadero
     # añadido interferencia con líneas Número 
    line_number = 3 
    SOURCE = list (string.ascii_letters)
     para el índice en el rango (0,10 ):
    

        SOURCE.append (STR (índice)) 

    # se utiliza para generar aleatoriamente una cadena de caracteres (incluyendo alfanumérico) 
    # define como un método de clase, y es privada, no llamar directamente al exterior objeto 
    @classmethod
     DEF gene_text (CLS):
         retorno  " " .join (random.sample (cls.SOURCE, cls.number)) 

    # de líneas de interferencia recibo 
    @classmethod
     DEF  __gene_line (CLS, dibujar, anchura, altura): 
        el inicio = (el random.randint (0, ancho), Random .randint (0, altura)) 
        End = (el random.randint (0, ancho), el random.randint (0, altura)) 
        draw.line ([el comenzar, terminar], Fill = cls.linecolor) 

    # se utiliza para interferir con la recepción Point 
    @classmethod
     def __gene_points (cls, draw, point_chance, ancho, alto): 
        chance = min (100 , max (0, int (point_chance)))
         para w en rango (ancho):
             para h en rango (alto): 
                tmp = random.randint (0,100 )
                 si tmp> 100 - chance: 
                    draw.point ((w, h), fill = (0,0,0))
     # 生成 验证 码
    @classmethod
     def gene_code (cls): 
        width, height = cls.size 
        image = Image.new ( ' RGBA' , (anchura, altura), cls.bgcolor) # Crear mesas de trabajo 
        font = ImageFont.truetype (cls.font_path, cls.fontsize) # códigos fuente 
        Draw = ImageDraw.Draw (Imagen) # Crear cepillo de 
        texto = cls.gene_text ( ) # generado cadena 
        font_width, font_height = font.getsize (texto) 
        draw.text (((anchura - font_width) / 2, (altura - font_height) / 2), texto, fuente = fuente, Fill = cls.fontcolor)
         IF cls.draw_line:
             # desplazamiento número_línea veces, es la raíz número_línea pintura líneas 
            de los ejes X en el rango (0, cls.line_number): 
                . CLS __gene_line(Draw, anchura, altura)
         # Si desea ruido de acuse de recibo 
        SI cls.draw_point: 
            . CLS __gene_points (Draw, 10 , anchura, altura)
         de retorno (texto, imagen)

El cuarto paso es crear una vista.

de utils.captcha.xfzcaptcha importación Captcha
 de IO importación BytesIO
 DEF img_captcha (Request): 
    texto, imagen = Captcha.gene_code ()
     # BytesIO corresponde a un conducto para el almacenamiento de los datos de imagen corriente 
    OUT = BytesIO ()
     # llamada la imagen Guardar método, las fotos almacenadas BytesIO 
    Image.Save (OUT, ' PNG ' )
     # la BytesIO el archivo puntero a la posición de inicio 
    out.seek (0) 
    Respuesta = la HttpResponse (el content_type = ' image / png ' )
     # de En la canalización BytesIO, lea los datos de la imagen y guárdelos en el objeto de respuesta
    response.write (out.read ()) 
    respuesta [ ' Content-length ' ] = out.tell ()
     de retorno respuesta

El quinto paso es crear un mapa de enrutamiento de URL

urlpatterns = [ 
    ruta ( ' login / ' , views.login_view, name = ' login ' ), 
    ruta ( ' logout / ' , views.logout_view, name = ' logout ' ), 
    ruta ( ' img_captcha / ' , views.img_captcha, name = ' img_captcha ' ), 
    ruta ( ' register / ' , views.register, name = ' register ' ) 
]

El sexto paso, verifique el código de verificación de la imagen que se muestra en nuestra página de inicio de sesión

 

Supongo que te gusta

Origin www.cnblogs.com/fengzi7314/p/12735506.html
Recomendado
Clasificación