小编ism*_*ail的帖子

处理Django request.GET和多个变量用于相同的参数名称

在django视图等中,您可以访问request.GET ['variablename'],因此在您的视图中,您可以返回执行以下操作:

myvar = request.GET['myvar']
Run Code Online (Sandbox Code Playgroud)

实际的request.GET ['myvar']对象类型是:

<class 'django.http.QueryDict'>
Run Code Online (Sandbox Code Playgroud)

现在,如果你想为同一参数名传递多个变量,即

http://example.com/blah/?myvar=123&myvar=567

换句话说,您希望为参数myvar返回一个python 列表

基本上我想做的就是这样

for var in request.GET['myvar']:
    print(var)
Run Code Online (Sandbox Code Playgroud)

但是,当您尝试这样时,您只获得在url中传递的最后一个值,即在上面的示例中,您将得到567

shell中的结果将是:

5
6
7
Run Code Online (Sandbox Code Playgroud)

但是,当你打印request.GET它似乎有一个列表,即:

<QueryDict: {u'myvar': [u'123', u'567']}>
Run Code Online (Sandbox Code Playgroud)

好的更新:它的目的是返回最后一个值,我的用例是我需要一个列表.

来自django docs:

的QueryDict.getitem(key)返回给定键的值.如果键具有多个值,则 getitem()将返回最后一个值.如果密钥不存在,则引发django.utils.datastructures.MultiValueDictKeyError.(这是Python标准KeyError的子类,因此您可以坚持捕获KeyError

QueryDict.getlist(key)以Python列表的形式返回带有请求键的数据.如果密钥不存在,则返回空列表.它保证返回某种列表.

更新:如果有人知道为什么django dev已经这样做了,请让我知道,显示一个列表似乎反直觉,它不像一个.不是pythonic!

django django-urls django-views

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

不是动态选择场WTFORMS的有效选择

我目前正在使用WTFORMS创建一个动态选择字段,但它永远不会提交并且验证失败并出现以下错误.

Not a valid choice
Run Code Online (Sandbox Code Playgroud)

我的字段是这样创建的:

area = SelectField()
Run Code Online (Sandbox Code Playgroud)

在视图中,我从数据库抓取选项,如下所示:

form = MytestForm()
form.area.choices = [(a.id, a.name) for a in Area.objects.all()]
Run Code Online (Sandbox Code Playgroud)

但是,如果我创建静态选项,它会工作.

python flask wtforms

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

Django-Registration和Django-Profile,使用您自己的自定义表单

我正在使用django-registration和django-profile来处理注册和配置文件.我想在注册时为用户创建个人资料.我创建了一个自定义注册表单,并使用以下教程将其添加到urls.py:

http://dewful.com/?p=70

本教程中的基本思想是覆盖默认注册表单以同时创建配置文件.

forms.py - 在我的个人资料应用中

from django import forms
from registration.forms import RegistrationForm
from django.utils.translation import ugettext_lazy as _
from profiles.models import UserProfile
from registration.models import RegistrationProfile

attrs_dict = { 'class': 'required' }

class UserRegistrationForm(RegistrationForm):
    city = forms.CharField(widget=forms.TextInput(attrs=attrs_dict))

    def save(self, profile_callback=None):
        new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
        password=self.cleaned_data['password1'],
        email=self.cleaned_data['email'])
        new_profile = UserProfile(user=new_user, city=self.cleaned_data['city'])
        new_profile.save()
        return new_user
Run Code Online (Sandbox Code Playgroud)

在urls.py中

from profiles.forms import UserRegistrationForm
Run Code Online (Sandbox Code Playgroud)

url(r'^register/$',
                           register,
                           {'backend': 'registration.backends.default.DefaultBackend', 'form_class' : UserRegistrationForm},
                           name='registration_register'),
Run Code Online (Sandbox Code Playgroud)

显示表单,我可以在City中输入,但不会在DB中保存或创建条目.

python django profile registration django-forms

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

Heroku的Rails,Mongoid和Unicorn配置

我正在使用Mongoid 3,使用Rails 3.2.9和Unicorn进行制作.想为mongodb建立一个before_fork和after_fork,找到以下代码进行活动记录:

before_fork do |server, worker|
  # Replace with MongoDB or whatever
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
    Rails.logger.info('Disconnected from ActiveRecord')
  end
end

after_fork do |server, worker|
  # Replace with MongoDB or whatever
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
    Rails.logger.info('Connected to ActiveRecord')
  end
end
Run Code Online (Sandbox Code Playgroud)

Mongoid的相关代码是什么(连接和断开连接)?

更新:

你真的不需要这样做,所以对于想要查看这个问题的人看到:

http://mongoid.org/en/mongoid/docs/rails.html

"独角兽和乘客

当使用Unicorn或Passenger时,每次使用app预加载或智能生成时分叉子进程,Mongoid将自动重新连接到master数据库.如果您手动在应用程序中执行此操作,则可以删除代码."

虽然知道什么是等效的Mongoid代码仍然很有趣.

ruby-on-rails heroku mongodb unicorn mongoid

31
推荐指数
1
解决办法
3271
查看次数

上传文件时Django的权限被拒绝错误

我目前有一个简单的模型定义,使用django缩略图插件的photoupload功能.

但是当我尝试上传时,它给出了以下错误:

OSError at /admin/products/photo/add/

(13, 'Permission denied')
Run Code Online (Sandbox Code Playgroud)

现在,我知道这似乎是一个权限问题,所以我检查的第一件事是对目录的权限,并将这些更改为777(只是测试),重新启动服务器和fcgi,它仍然给出错误.

追溯

Traceback: File "/usr/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
  92.                 response = callback(request, *callback_args,
**callback_kwargs) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in wrapper
  226.                 return self.admin_site.admin_view(view)(*args,
**kwargs) File "/usr/lib/python2.6/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/sites.py" in inner
  186.             return view(request, *args, **kwargs) File "/usr/lib/python2.6/dist-packages/django/db/transaction.py" in _commit_on_success
  240.                 res = func(*args, **kw) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in add_view
  734.                 self.save_model(request, new_object, form, change=False) File "/usr/lib/python2.6/dist-packages/django/contrib/admin/options.py" in save_model
  557.         obj.save() File "/usr/lib/python2.6/dist-packages/django/db/models/base.py" in save
  410.         self.save_base(force_insert=force_insert, …
Run Code Online (Sandbox Code Playgroud)

django permissions

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

加载自定义模板标记时出错(错误:没有名为x的模块)

我目前正在编写一些自定义模板标签,但由于某种原因它们无法加载.我的目录结构如下:

MyProj
 |
 ----MyApp
     |
     |----templatetags
          |
          |----myapp_tags.py
          |----__init__.py
Run Code Online (Sandbox Code Playgroud)

在myapp_tags.py中

from django.template import Library, Node
from myproj.myapp.models import Product

register = Library()

class LatestProductsNode(Node):
    def render(self, context):
        context['recent_products'] = Product.objects.all()[:5]
        return ''

def get_latest_products(parser, token):
    return LatestProductsNode()

get_latest_products = register.tag(get_latest_products)
Run Code Online (Sandbox Code Playgroud)

在settings.py中

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'myproj.myapp',
)
Run Code Online (Sandbox Code Playgroud)

在模板中

{% load myapp_tags %}
Run Code Online (Sandbox Code Playgroud)

尝试加载页面时出现的错误:

Exception Type:     TemplateSyntaxError Exception Value:    

'myapp_tags' is not a valid tag library: Could not load template library from django.templatetags.myapp_tags, No module named myapp_tags
Run Code Online (Sandbox Code Playgroud)

django django-templates django-custom-tags

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

你如何在Mac上收听来自iTunes的通知(使用NSDistributedNotificationCenter)

寻找帮助/教程/示例代码使用python来监听来自mac上的应用程序的分布式通知.我知道py-objc lib是python和mac/cocoa类之间的桥梁,Foundation库可用于添加观察者,但是查找有关如何使用它来监视iTunes的示例或教程.

python macos notifications pyobjc

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

Pip,Virtualenv&Git项目设置和引导

假设您有一个这样的项目设置:

-WebApp
   |_ requirements.txt
   |_ bootstrap.py (virtualenv bootstrap script)
   |_ src
       |_ setup.py
       |_ develop-app
             |_ somecode.py
             |_ morecode.py
Run Code Online (Sandbox Code Playgroud)

bootstrap.py用的virtualenv创建:

https://virtualenv.pypa.io/en/latest/reference.html#creating-your-own-bootstrap-scripts

现在,整个WebApp目录都是一个git repo(显然不包括virtualenv).目的是创建一个便携式virtualenv/git环境.问题是如果你把它develop-app放在你的requirements.txt开发中,它将把它安装在你的virtualenv目录下的/ src下,并将它符号链接到你的虚拟env站点包中.你最终得到的是你的源代码的两个副本 - 一个由git跟踪,另一个在你使用但未被git跟踪的Virtualenv中.

您如何确保git(develop-app)跟踪的目录中的更改在virtualenv中自动更新?

python development-environment pip virtualenv

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

urllib/urllib2返回的错误代码和实际页面

urllib/urllib2的正常行为是,如果在响应的标头中发送错误代码(即404),则引发异常.

你如何根据不同的错误寻找特定的错误,即(40x或50x),做不同的事情.另外,如何读取返回的实际数据HTML/JSON等(数据通常包含与HTML错误代码不同的错误详细信息)

python error-handling

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

Django manage.py产生了几个fcgi进程

有什么想法,下面两个命令之间的区别是什么?

命令: manage.py runfcgi method = threaded host = 127.0.0.1 port = 3033

labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs   14558  0.0  2.2  65948  8212 ?        Sl   Oct19   0:09 python /var/www/django_projects/myproject/manage.py runfcgi method=threaded host=127.0.0.1 port=3033
Run Code Online (Sandbox Code Playgroud)

命令: python manage.py runfcgi host = 127.0.0.1 port = 7021 protocol = fcgi pidfile =/tmp/myproject.fcgi.pid

labs@li68:/var/www/django_projects/myproject$ ps aux|grep manage.py
labs   21082  0.0  2.8  15440 10472 ?        S    22:27   0:00 python manage.py runfcgi host=127.0.0.1 port=3034 protocol=fcgi pidfile=/tmp/myproject.fcgi.pid
labs   21083  0.0  2.7  15440 10084 ?        S    22:27   0:00 python …
Run Code Online (Sandbox Code Playgroud)

django spawn-fcgi

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