Могу ли я сделать qrcode из python функции с django - PullRequest
0 голосов
/ 26 февраля 2020

Я делаю школьный проект, где мне нужен слэбот, чтобы отправить сообщение в чат при сканировании qrcode. У меня проблемы с поиском решения, в котором я могу преобразовать функцию python в qrcode внутри шаблона html.

views.py :

from django.shortcuts import render
from rest_framework import viewsets
import os
import slack
import qrcode
from dotenv import load_dotenv
from django.contrib import messages


load_dotenv()
client = slack.WebClient(token=os.getenv("SLACK_TOKEN"))

#Index view
def home(request):
return render(request, 'rest/index.html')

#Beer function
def nobeer(request):
data = client.chat_postMessage(
    channel='#general',
    text="some text here"
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill='black', back_color='white')

messages.success(request, 'message sent to slack')
return render(request, 'rest/index.html')

index. html

<title>Slackbot</title>
  </head>
  <body>
    <div class='container'>
      <div class='row'>
    <div class='col'>
      <div>
        {% load qr_tags %}
        {% qr_from_object nobeer “size” %}

          </div>
        </div>
        <div class='col'></div>
        <form method="POST" action="/api/beer/">
           {% csrf_token %}
        <button type="submit" class="btn btn-primary">send message</button>
      </form>
      </div>
      </div>
      <div>
      {% if messages %}
      {% for message in messages %}
       {% if message.tags %}  <script>alert("{{ message }}")</script> {% endif %}
      {% endfor %}
      {% endif %}
      </div>
    </div>
  </body>
</html>    

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Я вижу, что вы пытаетесь использовать приложение django -qr-code для повторного использования, но вы импортируете чистую python библиотеку qrcode

Попробуйте это (используя библиотеку qrcode python):

views.py

from io import BytesIO
import base64

def nobeer(request):

    data = client.chat_postMessage(
    channel='#general',
    text="some text here"
    )
    qr.add_data(data)
    qr.make(fit=True)
    img = qr.make_image(fill='black', back_color='white')

    buffer = BytesIO()
    img.save(buffer, format="PNG")
    img_str = base64.b64encode(buffer.getvalue()).decode("utf-8")
    messages.success(request, 'message sent to slack')
    return render(request, rest/index.html', {'my_qr_code': img_str })

index. html

<title>Slackbot</title>
</head>
<body>
<div class='container'>
  <div class='row'>
   <div class='col'>
     <div>
        <img src="data:image/png;base64,{{ my_qr_code|safe }}">

      </div>
    </div>
    <div class='col'></div>
    <form method="POST" action="/api/beer/">
       {% csrf_token %}
    <button type="submit" class="btn btn-primary">send message</button>
  </form>
  </div>
  </div>
  <div>
  {% if messages %}
  {% for message in messages %}
   {% if message.tags %}  <script>alert("{{ message }}")</script> {% endif %}
  {% endfor %}
  {% endif %}
  </div>
</div>

0 голосов
/ 26 февраля 2020

Значительно проще сгенерировать QR-код на стороне клиента, используя javascript, чем пытаться сгенерировать его на стороне сервера. Мой совет - использовать библиотеку типа qrcode. js.

...