小编Pla*_*sma的帖子

Django:验证上传文件的文件类型

我有一个应用程序,让人们上传文件,表示为UploadedFiles.但是,我想确保用户只上传xml文件.我知道我可以使用magic,但我不知道在哪里进行此检查 - 我无法将其放在clean函数中,因为在clean运行时文件尚未上传,据我所知.

这是UploadedFile模型:

class UploadedFile(models.Model):
    """This represents a file that has been uploaded to the server."""
    STATE_UPLOADED = 0
    STATE_ANNOTATED = 1
    STATE_PROCESSING = 2
    STATE_PROCESSED = 4
    STATES = (
        (STATE_UPLOADED, "Uploaded"),
        (STATE_ANNOTATED, "Annotated"),
        (STATE_PROCESSING, "Processing"),
        (STATE_PROCESSED, "Processed"),
    )

    status = models.SmallIntegerField(choices=STATES,
        default=0, blank=True, null=True) 
    file = models.FileField(upload_to=settings.XML_ROOT)
    project = models.ForeignKey(Project)

    def __unicode__(self):
        return self.file.name

    def name(self):
        return os.path.basename(self.file.name)

    def save(self, *args, **kwargs):
        if not self.status:
            self.status = …
Run Code Online (Sandbox Code Playgroud)

django django-models django-uploads

31
推荐指数
4
解决办法
2万
查看次数

使用配置文件登录Python - 使用通过代码在文件中定义的处理程序

我正在使用python的日志模块.如何从代码中访问配置文件中定义的处理程序.作为一个例子,我有一个定义的记录器和两个处理程序 - 一个用于屏幕,另一个用于文件.我想根据用户偏好使用适当的处理程序(无论他们是想登录屏幕还是文件).如何从配置文件中定义的记录器动态添加和删除配置文件中定义的处理程序?

[loggers]

keys=root,netmap

[handlers]
keys=fil,screen

[logger_root]
level=NOTSET
handlers=

[logger_netmap]
level=INFO
handlers=fil,screen
qualname=netmap

[formatters]
keys = simple

[formatter_simple]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=

[handler_fil]
class=handlers.RotatingFileHandler
args=('file.log','a','maxBytes=10000','backupCount=5')
formatter=simple

[handler_screen]
class=StreamHandler
args = (sys.stdout,)
formatter=simple
Run Code Online (Sandbox Code Playgroud)

根据用户是否使用-v运行程序,我需要使用File或Screen Handler之一.如何从netmap记录器添加或删除fil或screen处理程序?

python logging python-2.x

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

Sphinx无法导入任何东西

我正在尝试用sphinx来记录我的一个项目.我在所有模块和文件中都使用了autodoc字符串.我使用sphinx-apidoc rst为我的代码自动生成文件.到现在为止还挺好.

问题是sphinx无法导入我的任何模块,即使我已经添加了我的项目sys.path.

我的单元测试通过,可以导入我的模块就好了.我的智慧结束了; 我已经尝试了各种重命名和移动,重新加载和重新配置而没有成功,至少可以说非常令人沮丧.

这是我的文档结构:

project
??? collectionprocessor.py
??? config.py
??? createdb.py
??? database
?   ??? database.py
?   ??? __init__.py
??? docs
?   ??? _build
?   ??? conf.py
?   ??? generated
?   ??? index.rst
?   ??? Makefile
?   ??? modules.rst
?   ??? project.database.rst
?   ??? project.document.rst
?   ??? project.mixins.rst
?   ??? project.parser.rst
?   ??? project.rst
?   ??? project.sequence.rst
?   ??? project.tests.rst
?   ??? _static
?   ??? _templates
??? document
?   ??? document.py
?   ??? …
Run Code Online (Sandbox Code Playgroud)

python python-sphinx

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

安装后无法运行pywin32

我试图在AMD处理器上的Windows 7 64位上使用winpexpect.为此,我安装了名为pywin32的可执行文件pywin32-214.win-amd64-py2.7.图形安装程序似乎成功运行,但是当我尝试导入时出现此错误winpexpect:

>>> import winpexpect
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Alexei\wordseer_flask\venv\lib\site-packages\winpexpect.py", li
ne 11, in <module>
    import pywintypes
  File "C:\Users\Alexei\wordseer_flask\venv\lib\site-packages\pywin32-214-py2.7-
win32.egg\pywintypes.py", line 124, in <module>
    __import_pywin32_system_module__("pywintypes", globals())
  File "C:\Users\Alexei\wordseer_flask\venv\lib\site-packages\pywin32-214-py2.7-
win32.egg\pywintypes.py", line 64, in __import_pywin32_system_module__
    import _win32sysloader
ImportError: DLL load failed: %1 is not a valid Win32 application.
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时C:\Python27\Scripts\pywin32_postinstall:

C:\Windows\system32>C:\Python27\Scripts\pywin32_postinstall.py -install
Traceback (most recent call last):
  File "C:\Python27\Scripts\pywin32_postinstall.py", line 601, in <module>
    install()
  File "C:\Python27\Scripts\pywin32_postinstall.py", line 311, …
Run Code Online (Sandbox Code Playgroud)

python pywin32

5
推荐指数
1
解决办法
3554
查看次数

ubuntu安装lxml失败

我正在尝试在 ubuntu 14.04 上的 virtualenv 内安装 lxml。

$ uname -a
Linux foobar 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:    14.04
Codename:   trusty
Run Code Online (Sandbox Code Playgroud)

我已经安装了依赖项,如 lxml 文档中指定的那样。以下是我安装的具体包:

$ dpkg-query -l | grep libxml
ii  libxml-commons-external-java              1.4.01-2build1                             all          XML Commons external code - DOM, SAX, and JAXP, etc
ii  libxml-commons-resolver1.1-java           1.2-7build1                                all          XML entity and URI resolver library
ii  libxml-parser-perl                        2.41-1build3 …
Run Code Online (Sandbox Code Playgroud)

python ubuntu lxml pip

5
推荐指数
1
解决办法
2978
查看次数

从烧瓶蓝图中的主应用程序导入

我正在编写一个带有蓝图的应用程序.我的应用程序使用Flask-SQLAlchemy,因此我的蓝图需要访问主应用程序的db对象(由Flask-SQLAlchemy创建)才能创建自己的模型.

但是,当我试图获取db对象时current_app.db,flask会给我以下错误:

RuntimeError: working outside of application context
Run Code Online (Sandbox Code Playgroud)

这是我的主要内容__init__.py:

from flask import Flask

from app.uploader import uploader

app = Flask(__name__)

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)

app.register_blueprint(uploader)
Run Code Online (Sandbox Code Playgroud)

这是__init__.py我的uploader蓝图:

from flask import Blueprint

uploader = Blueprint('uploader', __name__,
    template_folder='templates')

from . import views
from .models import *
Run Code Online (Sandbox Code Playgroud)

以下views.py是发生异常的蓝图:

from flask import (redirect, render_template, request, send_from_directory,
    session, current_app)
from flask.views import View
from werkzeug import secure_filename

print current_app.db …
Run Code Online (Sandbox Code Playgroud)

python flask

4
推荐指数
1
解决办法
4702
查看次数

ListView和CreateView在一个模板Django中

我正在设计一个页面,人们可以在其中查看和创建某种对象(对象是模型项目的实例).

据我所知,我不能在一个视图中没有可怕的杂乱代码,所以我试图理解如何使用一个模板来显示两个视图(ProjectCreateView和ProjectListView).

现在,这就是我正在使用的:

views.py:

class ProjectCreateView(CreateView):
    model = Project
    template_name = "fileupload/project_list.html"
    fields = ["name"]

    def get_context_data(self, **kwargs):
        context = super(ProjectCreateView, self).get_context_data(**kwargs)
        return context

class ProjectListView(ListView):
    model = Project

    def get_context_data(self, **kwargs):
        context = super(ProjectListView, self).get_context_data(**kwargs)
        return context

class ProjectView(View):
    model = Project
    def get(self, request, *args, **kwargs):
        view = ProjectListView.as_view()
        return view(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        view = ProjectCreateView.as_view()
        return view(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

urls.py

urlpatterns = patterns('',
    url(r'^projects/$', ProjectView.as_view(), name="projects"),
)
Run Code Online (Sandbox Code Playgroud)

models.py

class Project(models.Model):
    name = …
Run Code Online (Sandbox Code Playgroud)

django django-templates django-views

3
推荐指数
2
解决办法
4761
查看次数

根据单击的按钮验证 WTForm 表单

在我的表单上,我有两个按钮用于提交表单。一个按钮删除选定的文件(显示在表格中,一个复选框用于对象),另一个按钮选择它们进行处理。

当文件在删除时被选择时,不需要验证(除了检查是否至少选择了一个文件)。但是,为了进行处理,我需要确保只有一个具有特定扩展名的文件。基本上,我需要根据用户单击的按钮进行不同的验证过程。

我怎样才能最好地做到这一点?我知道我可以在视图中执行验证,但我更喜欢在表单内验证它,因为它更干净。

这是有问题的表格:

class ButtonWidget(object):
    """A widget to conveniently display buttons.
    """
    def __call__(self, field, **kwargs):
        if field.name is not None:
            kwargs.setdefault('name', field.name)
        if field.value is not None:
            kwargs.setdefault('value', field.value)
        kwargs.setdefault('type', "submit")
        return HTMLString('<button %s>%s</button>' % (
            html_params(**kwargs),
            escape(field._value())
            ))

class ButtonField(Field):
    """A field to conveniently use buttons in flask forms.
    """
    widget = ButtonWidget()

    def __init__(self, text=None, name=None, value=None, **kwargs):
        super(ButtonField, self).__init__(**kwargs)
        self.text = text
        self.value = value
        if name is not None:
            self.name = name

    def …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-wtforms

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

从蓝图更改 jinja_env

我正在尝试使用该对象在我的蓝图上注册一个新的 jinja 全局Blueprint。然而,对象似乎Blueprint没有jinja_env属性;如何注册新的 jinja 全局属性?

这是__init__.py蓝图,这不起作用:

from flask import Blueprint, current_app

uploader = Blueprint('uploader', __name__, template_folder='templates')

from . import views
from . import models

current_app.jinja_env.globals['form_token'] = views.generate_form_token
Run Code Online (Sandbox Code Playgroud)

这也不是:

uploader.jinja_env.globals['form_token'] = views.generate_form_token
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask

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

与association_proxy的双向关系

我有两个型号,Word并且Sentence,它有一个双向的许多一对多的关系.为了存储其他信息,我有一个关联对象,WordInSentence.

class WordInSentence(Base):
    __tablename__ = "word_in_sentence"
    word_id = Column(Integer, ForeignKey('word.id'),
        primary_key=True)
    sentence_id = Column(Integer, ForeignKey('sentence.id'),
        primary_key=True)
    space_after = Column(String)
    tag = Column(String)
    position = Column(Integer)

    word = relationship("Word",
        backref=backref("word_sentences", lazy="dynamic"))
    sentence = relationship("Sentence",
        backref=backref("sentence_words", lazy="dynamic"))

class Sentence(Base):
    text = Column(Text, index = True)

    words = association_proxy("sentence_words", "word",
        creator=lambda word: WordInSentence(word=word))

class Word(Base):

    word = Column(String, index = True)
    sentences = association_proxy("word_sentences", "sentence",
        creator=lambda sent: WordInSentence(sentence=sent))

    def __repr__(self):
        return "<Word: " + str(self.word) + ">" …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy relationship

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