微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将变量传递给另一个函数烧瓶

如何解决如何将变量传递给另一个函数烧瓶

我做了烧瓶功能来给pdf文件加水印:

@app.route('/upload_file',methods=['POST'])
def upload_file():

pdf_file = request.files['file']
watermark = "watermark.pdf"
merged_file = "merged.pdf"

input_pdf = PyPDF2.PdfFileReader(pdf_file)

watermark_file = open(watermark,'rb')
watermark_pdf = PyPDF2.PdfFileReader(watermark_file)

pdf_page = input_pdf.getPage(0)

watermark_page = watermark_pdf.getPage(0)

pdf_page.mergePage(watermark_page)

output = PyPDF2.PdfFileWriter()

output.addPage(pdf_page)

merged_file = open(merged_file,'wb')
output.write(merged_file)

merged_file.close()
watermark_file.close()
pdf_file.close()

return redirect(url_for("encrypt",file=merged_file))

如何将 'merged_file' 变量传递给 Flask 中的另一个函数

我想让带水印的pdf文件进入另一个函数进行加解密。功能如下:

@app.route("/<file>")
def encrypt(file):

key = Fernet.generate_key()

file = open('key.key','wb')
file.write(key)
file.close()

file = open('key.key','rb')
key = file.read()
file.close()

# with open ('mykey.key','wb') as mykey:
#     mykey.write(key)  

# with open('mykey.key','rb') as mykey:
#     key = mykey.read()

# print(key)

with open({file},'rb') as original_file:
    original = original_file.read()

f = Fernet(key)
encrypted = f.encrypt(original)

with open('test1.pdf','wb') as encrypted_file:
    encrypted_file.write(encrypted)

f = Fernet(key)

with open('test1.pdf','rb') as encrypted_file:
    encrypted = encrypted_file.read()

decrypted = f.decrypt(encrypted)

with open('test2.pdf','wb') as decrypted_file:
    decrypted_file.write(decrypted)

return "Success encrypt"

追溯:

Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\python39\Lib\site-packages\flask\app.py",line 2088,in __call__
    return self.wsgi_app(environ,start_response)
  File "C:\Users\User\AppData\Local\Programs\Python\python39\Lib\site-packages\flask\app.py",line 2073,in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\User\AppData\Local\Programs\Python\python39\Lib\site-packages\flask\app.py",line 2070,in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\User\AppData\Local\Programs\Python\python39\Lib\site-packages\flask\app.py",line 1515,in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\User\AppData\Local\Programs\Python\python39\Lib\site-packages\flask\app.py",line 1513,in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\User\AppData\Local\Programs\Python\python39\Lib\site-packages\flask\app.py",line 1499,in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "C:\Users\User\Desktop\abc\test.py",line 98,in encrypt
    with open({file},'rb') as original_file:
TypeError: expected str,bytes or os.pathLike object,not set

我应该在第 98 行的 {file} 处替换什么?请帮忙。谢谢

解决方法

名称 file 是您在第 6 行中打开的文件对象,因此我更改了变量名称, 试试这个:

@app.route("/<file>")
def encrypt(file):

key = Fernet.generate_key()

file1 = open('key.key','wb')
file1.write(key)
file1.close()

file2 = open('key.key','rb')
key = file2.read()
file2.close()

# with open ('mykey.key','wb') as mykey:
#     mykey.write(key)  

# with open('mykey.key','rb') as mykey:
#     key = mykey.read()

# print(key)

with open(str(file),'rb') as original_file:
    original = original_file.read()

f = Fernet(key)
encrypted = f.encrypt(original)

with open('test1.pdf','wb') as encrypted_file:
    encrypted_file.write(encrypted)

f = Fernet(key)

with open('test1.pdf','rb') as encrypted_file:
    encrypted = encrypted_file.read()

decrypted = f.decrypt(encrypted)

with open('test2.pdf','wb') as decrypted_file:
    decrypted_file.write(decrypted)

return "Success encrypt"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。