使用情景
生成二维码
效果展示
原理
python
负责生成二维码autojs
负责展示二维码
知识点
- python自定义模块的导入
django
解析POST method
传过来的数据- python判断字符串中是否包含中文
代码讲解
python
- 添加路由
urlpatterns = [ path('', csrf_exempt(views.mqrcode), name='qrcode'), ]
- 编写生成二维码的函数
def mqrcode(request):
- 解析
POST method
传过来的数据
# 获取content字段的值 content = request.POST.get("content") # 获取背景图片 background_image = request.FILES.get('background_image')
- 如果有中文, 就提示禁止中文
def is_chinese(string): """ 检查整个字符串是否包含中文 :param string: 需要检查的字符串 :return: bool """ for ch in string: if u'\u4e00' <= ch <= u'\u9fff': return True return False HttpResponse("禁止中文")
- 保存图片和文字
# 保存图片 in_filepath = handle_uploaded_file(background_image) # 保存文字 with open(father_path + '/res/' + 'content.txt', 'w') as f: f.write(content)
- 编写生成二维码的模块
def create(content, in_filepath):
- 导入二维码模块
BASE_DIR = os.path.abspath(os.path.dirname( os.path.dirname(os.path.abspath(__file__))) + '/qrcode') sys.path.append(BASE_DIR) import createqrcode
- 生成二维码
myqr.run( words=content, # 二维码网址内容 version=3, # 设置容错率为最高 level='H', # 控制纠错水平,范围是L、M、Q、H,从左到右依次升高 picture=in_filepath, # 导入图片 colorized=True, # 生成彩图 contrast=1.0, # 用以调节图片的对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0 brightness=1.0, # 用来调节图片的亮度,其余用法和取值同上 save_name="demo.png", # 保存文件的名字,格式可以是jpg,png,bmp,gif save_dir=father_path + "/res" # 默认存储位置是当前目录 )
- 二维码返回给前端
def download_api(filepath): file = open(filepath, 'rb') response = HttpResponse(file) # 设置头信息,告诉浏览器这是个文件 response['Content-Type'] = 'application/octet-stream' response['Content-Disposition'] = 'attachment;filename="cat.jpg"' return response
autojs
1.ui
"ui"; ui.layout( <vertical margin="20" gravity="center"> <horizontal> <text>图片路径</text> <input id="imgPath" w="*"> cat.jpg </input> </horizontal> <horizontal> <text>文字内容(禁止中文)</text> <input id="content" w="*"> miao </input> </horizontal> <button id="btn" textSize="20sp"> 生成二维码 </button> <text textSize="30sp" w="*" gravity="center"> 作者: 牙叔 </text> <img id="img" w="300dp" h="300dp"></img> </vertical> );
- 设置点击事件
ui.btn.click(function () { threads.start(function () { let url = "http://192.168.101.4:8000/qrcode/"; var res = http.postMultipart(url, getData()); let tempFilepath = "/sdcard/1.jpg"; files.writeBytes(tempFilepath, res.body.bytes()); ui.run(function () { ui.img.attr("src", "file://" + tempFilepath); }); // app.viewFile(tempFilepath); }); });