小编Joo*_*ost的帖子

jinja + form + unicode控制字符+ xml/docx集成

我正在根据表单中的用户输入创建word文档.但是,当用户输入一个unicode控制字符,并尝试使用python-docx包创建一个word文件时,会发生以下错误:

File "src\lxml\apihelpers.pxi", line 1439, in lxml.etree._utf8
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
Run Code Online (Sandbox Code Playgroud)

我设法通过在每个请求之前检查表单中的无效xml字符来解决此问题(我有许多表单可能会出现此问题),并从字段中删除任何无效的xml字符.然后我创建一个新的不可变多字典,并用清理后的文本填充它.

from docx import Document
from docx.shared import Inches
from flask import Flask, render_template_string, request
from werkzeug.datastructures import ImmutableMultiDict

def valid_xml_char_ordinal(c):
    codepoint = ord(c)
    return (0x20 <= codepoint <= 0xD7FF or codepoint in (0x9, 0xA, 0xD) or
            0xE000 <= codepoint <= 0xFFFD or 0x10000 <= codepoint <= 0x10FFFF)

app = Flask(__name__)

@app.before_request
def before_request():
    if 'check_form_xml_validity' in …
Run Code Online (Sandbox Code Playgroud)

python lxml jinja2 flask python-docx

8
推荐指数
1
解决办法
270
查看次数

Flask wtforms - “UnboundField”对象不可调用,动态字段将无法正确初始化

应用程序.py

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, FieldList, FormField

app = Flask(__name__)
app.config['SECRET_KEY'] = 'apple pie'


class BookForm(FlaskForm):
    book = StringField('book title')


class LibraryForm(FlaskForm):
    def __init__(self, min_entries=0, *args, **kwargs):
        super(LibraryForm, self).__init__(*args, **kwargs)
        self.books = FieldList(FormField(BookForm), min_entries=min_entries)

    library = StringField('Library name')
    books = FieldList(FormField(BookForm), min_entries=3)
    submit = SubmitField('Submit')


@app.route('/book', methods=['GET', 'POST'])
def book():
    form = LibraryForm(min_entries=5)
    if form.validate_on_submit():
        return 'aww yeah'
    return render_template('books.html', form=form)
Run Code Online (Sandbox Code Playgroud)

书籍.html

<html>
<form method="POST" action="">
    {{ form.hidden_tag() }}
    <div>{{ …
Run Code Online (Sandbox Code Playgroud)

flask wtforms flask-wtforms

6
推荐指数
1
解决办法
1万
查看次数

SQLAlchemy 中多对多查询非常慢

我有这个数据库,其中包含 3 个表、饼图、人员以及两者之间的连接点。一个馅饼可以由很多人制作,一个人可以制作很多馅饼,所以这是一个非常合法的用例。

我想要输出的是一个巨大的表,格式如下:

+-------------------------------------------------------
| person_id | person_name | pies
+-------------------------------------------------------
|     1     |    john     | apple, banana, plum, ..
|     2     |    mary     | apple, plum, pineapple, ..
|    ...    |     ...     | ..., ..., ..., ...
|   10000   |    josh     | banana, coconut, ...
Run Code Online (Sandbox Code Playgroud)

我目前正在实现这一目标如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import random
import time

app = Flask(__name__)
db = SQLAlchemy(app)

person_to_pie_association_table = db.Table(
    'person_to_pie_association_table',
    db.metadata,
    db.Column('pie_id', db.Integer, db.ForeignKey('pie.id')),
    db.Column('person_id', db.Integer, db.ForeignKey('person.id'))
)

class Person(db.Model): …
Run Code Online (Sandbox Code Playgroud)

sql sqlalchemy flask flask-sqlalchemy

3
推荐指数
1
解决办法
1171
查看次数