python-사진 흐름 전송의 사고방식 및 예시 (url 변환 QR코드)

1. 장면

  • URL 동적 생성 QR코드 프런트엔드 디스플레이(위챗페이 등)---
  • 1. 정적 파일 경로 액세스
    반환 URL_name, (a 태그, src 정적 루트 접근)
    2. 흐름 전송, 전면 렌더링
    바이너리 흐름은 전단으로 돌아가고, 전단은 바이너리 흐름 인코딩 유형에 따라 표시된다
    3. 전단 js 생성
    백그라운드에서 위챗페이로 가져온code_url, 프런트엔드 js장code_url QR 코드 생성 및 렌더링
  • 실제 코드
  • python_ 사용하기웹 프레임워크 - tornado
    manager.py
    
    import os
    import asyncio
    
    import tornado.ioloop
    import tornado.httpserver
    import tornado.web
    import tornado.options
    
    from tornado.options import define, options, parse_command_line
    from apps import UrlHandler, Url2Handler, Url3Handler
    
    
    define("port", default=8000, type=int)
    
    
    def create_app():
      settings = {
        "template_path": os.path.join(os.path.dirname(__file__), "templates"),
        "static_path": os.path.join(os.path.dirname(__file__), "static"),
      }
      application = tornado.web.Application(
        handlers=[
          (r"/url", UrlHandler),
          (r"/url2", Url2Handler),
          (r"/url3", Url3Handler),
        ],
        debug=True,
        **settings,
      )
      return application
    
    
    if __name__ == '__main__':
      parse_command_line()
      app = create_app()
      server = tornado.httpserver.HTTPServer(app)
      server.listen(options.port)
      asyncio.get_event_loop().run_forever()
    apps.py
    
    import tornado.web
    from manager_handler import gen_qrcode, gen_qrcode_obj,gen_qrcode_buf
    
    
    class BaseHandler(tornado.web.RequestHandler):
      pass
    
    
    class UrlHandler(BaseHandler):
      def get(self):
        #  
        self.render('qrcode.html', title='url', data='URL- ', img_stream='')
    
      async def post(self):
        #  
        url = self.get_argument('url_str')
    
        # URL 
        img_stream = gen_qrcode(url)
        await self.render('qrcode.html', title='qrcode', data=' ', img_stream=img_stream)
    
    
    class Url2Handler(BaseHandler):
      def get(self):
        #  
        self.render('qrcode.html', title='url', data='URL- ', img_stream='')
    
      async def post(self):
        #  
        url = self.get_argument('url_str')
    
        # URL 
        img_stream = gen_qrcode_obj(url=url)
        # await self.render('qrcode.html', title='qrcode', data=' ', img_stream=img_stream)
        self.set_header('Content_Type', 'image/jpg')
        self.set_header('Content_length', len(img_stream))
        self.write(img_stream)
    
    
    class Url3Handler(BaseHandelr):
      def get(self):
        self.render('qrcode.html', title='url', data='URL- ', img_stream='')
    
      def post(self):
        url = self.get_argument('url')
        img_stream = gen_qrcode_buf(url)
        self.set_header('Content-Type', 'image/png')
        self.write(img_stream)
    manager_handler.py
    
    import qrcode
    import io
    import base64
    import time
    
    
    def gen_qrcode(url):
      """
       1: URL 
      :param url:  URL
      :return: base64     
      """
      qr = qrcode.make(url)
      buf = io.BytesIO()
      qr.save(buf)
      img_buf = buf.getvalue()
      img_stream = base64.b64encode(img_buf)
      return img_stream
    
    
    def gen_qrcode_obj(version=1, box_size=10, border=4, url=None):
      """
       2: URL ( , template  data:base64 )
      :param version:
      :param box_size:
      :param border:
      :return:
      """
      qr = qrcode.QRCode(
        version=version,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=box_size,
        border=border,
      )
    
      url = "https://www.12dms.com" if url is None else url
      save_name = "./" + "qrcode" + str(time.time()) + ".png"
    
      qr.add_data(url)
      qr.make()
      img = qr.make_image()
      img.save(save_name.encode())
      with open(save_name, 'rb') as img_f:
        img_stream = img_f.read()
        img_stream = base64.b64encode(img_stream)
        print(img_stream)
      return img_stream
    
    def gen_qrcode_buf(words):
      qr = qrcode.make(words)
      buf = io.BytesIO()
      qr.save(buf, 'png')
      qr_buf = buf.getvalue()
      # img_stream = base64.b64encode(qr_buf)
      return qr_buf
    base.html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>{% block title %}{% end %}</title>
      {% block head %}{% end %}
    </head>
    
    <body>
      <h1 style="text-align: center">
        {% block h1 %}{{ data }}{% end %}
      </h1>
      {% block content %}{% end %}
    </body>
    </html>
    qrcode.html
    
    {% extends "base.html" %}
    
    {% block title %}
      {{ title }}
    {% end %}
    
    {% block h1 %}
      {{ data }}
    {% end %}
    
    
    {% block content %}
      <form method="post" action="" >
        <p>
           URL:<input name="url_str"/>
          <br>
    {#      {{ img_stream }}#}
          {% if img_stream %}
            <img style="width:180px" src="data:;base64,{{ img_stream }}" alt="">
          {% end %}
        </p>
        <br>
        <input id="submit" type="submit" value=" ">
      </form>
    {% end %}
    이상은python-사진 흐름 전송의 사고방식과 예시(url 변환 QR코드)의 상세한 내용입니다. 더 많은python 사진 흐름 전송에 관한 자료는 저희 다른 관련 글에 주목하세요!

    좋은 웹페이지 즐겨찾기