小编Jor*_*ter的帖子

在views.py中的urls.py中包装/装饰函数

所以,我非常熟悉在views.py中包装函数.所以我写了一个装饰,如果用户重定向到默认REDIRECT_URL 在(某种反向的记录login_required); 这是基于我过去的观点:

def not_logged_in(redirect_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
    def decorator(view_func, *args, **kwargs):
        def wrapper(request, *args, **kwargs):
            if not request.user.is_authenticated():
                return view_func(*args, **kwargs)
            else:
                redirect_url = (request.REQUEST.get(redirect_field_name, redirect_url) or
                                settings.REDIRECT_URL)
                return HttpResponseRedirect(redirect_url)
        return wrapper
    return decorator
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:'function' object has no attribute 'status_code'这是由MiddleWare期望HttpResponse引起的.当我response看到它的价值时,我看到了它<function wrapper at 0x2b3a9922a500>.

以下是我在调用它的方式urls.py:

url(r'login/', 
     not_logged_in(auth_views.login), 
     {'authentication_form': LoginForm },
),
Run Code Online (Sandbox Code Playgroud)

django decorator

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

与用户模型(django.contrib.auth)的OneToOne关系,没有级联删除

当删除发挥作用时,我对OneToOneField的工作方式感到有些困惑.我能找到的唯一准权威信息来自django-developers上的这个帖子:

我不知道你是否发现了这个,但是删除工作是朝着一个方向发展的,但不是你想要的方向.例如,使用您在另一条消息中发布的模型:

class Place(models.Model): 
    name = models.CharField(max_length = 100)  
class Restaurant(models.Model): 
    place = models.OneToOneField(Place, primary_key=True)  
Run Code Online (Sandbox Code Playgroud)

如果您创建了与其关联的地方和餐厅,则删除该餐厅将不会删除该地点(这是您在此处报告的问题),但删除该地点将删除该餐厅.

我有以下型号:

class Person(models.Model):
    name = models.CharField(max_length=50)
    # ... etc ...
    user = models.OneToOneField(User, related_name="person", null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

它的成立这种方式让我可以轻松地访问personUser使用实例user.person.

但是,当我尝试删除User管理员中的记录时,自然它会向后传递到我的Person模型,正如线程所讨论的那样,显示了以下内容:

您确定要删除用户"JordanReiter2"吗?以下所有相关项目将被删除:

  • 网友:JordanReiter
    • 人:JordanReiter
      • 提交:Title1
      • 提交:Title2

不用说,我也没有要删除的Person记录,或任何其后代!

我想我理解逻辑:因为Person记录中的OneToOne字段中有一个值,删除User记录会user_id在数据库的列中创建一个错误的引用.

通常,解决方案是切换OneToOne字段所在的位置.当然,这是不可能的,因为User对象几乎是由它设定的django.contrib.auth.

有没有办法防止删除级联,同时仍然有一个直接的方式来访问人user?是创建扩展版本的模型的唯一方法吗?Userdjango.contrib

更新

我改变了模型名称,所以希望它现在更清晰了.基本上,有成千上万的人事记录.不是每个人都有登录,但如果他们这样做,他们只有一个登录.

django one-to-one django-authentication cascading-deletes

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

urllib.request:在不修改请求对象的情况下从中读取的任何方法?

给定一个标准urllib.request对象,检索如下:

req = urllib.urlopen('http://example.com')
Run Code Online (Sandbox Code Playgroud)

如果我通过via读取其内容req.read(),之后请求对象将为空.

然而,与普通的类文件对象不同,请求对象没有seek方法,因为我确信这是很好的理由.

但是,在我的情况下,我有一个函数,我希望它对请求做出某些确定,然后将该请求"无损"地返回,以便可以再次读取它.

我知道一个选择是重新请求它.但我希望能够避免为相同的网址和内容发出多个HTTP请求.

我能想到的唯一另一种选择是让函数返回提取内容和请求对象的元组,同时理解调用此函数的任何东西都必须以这种方式获取内容.

这是我唯一的选择吗?

python urllib

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

如何检测 HTML 内容在渲染时是否为空白/空白?

考虑如下代码:

<p>&nbsp;</p><!-- comment -->
<span></span><br />
<div><span class="foo"></span></div>
Run Code Online (Sandbox Code Playgroud)

在浏览器上它会有效地呈现为一段空白。

我想知道,考虑到该标记或类似的标记,是否有一种简单的编程方法来检测删除了空格的该代码的最终结果是一个空字符串。

这里的实现是 JavaScript,但我也对一种更通用(与语言无关)的解决方案感兴趣(如果存在)。

请注意,仅删除标签并查看是否保留任何文本并不是真正的解决方案,因为有大量标签最终会呈现可见内容(例如 img、hr 等)。

html whitespace is-empty

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

Python中具有相同基类的多重继承

我试图在python中围绕多重继承.

假设我有以下基类:

class Structure(object):
    def build(self, *args):
        print "I am building a structure!"
        self.components = args
Run Code Online (Sandbox Code Playgroud)

让我们说我有两个继承它的类:

class House(Structure):
    def build(self, *args):
        print "I am building a house!"
        super(House, self).build(*args)

class School(Structure):
    def build(self, type="Elementary", *args):
        print "I am building a school!"
        super(School, self).build(*args)
Run Code Online (Sandbox Code Playgroud)

最后,创建一个使用多重继承的类:

class SchoolHouse(School, House):
    def build(self, *args):
        print "I am building a schoolhouse!"
        super(School, self).build(*args)
Run Code Online (Sandbox Code Playgroud)

然后,我创建一个SchoolHouse对象并build在其上运行:

>>> sh = SchoolHouse()
>>> sh.build("roof", "walls")
I am building a schoolhouse!
I am building a house!
I …
Run Code Online (Sandbox Code Playgroud)

python multiple-inheritance

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

如何防止jquery.ui.dialog滚动到顶部窗口(当以编程方式调用时)

我有以下代码:

    $(".foo-form").submit(function (event) {
        event.stopPropagation();
        event.preventDefault();
        $.ajax({
            url: this.action,
            data: $(this).serializeArray(),
            type: 'POST',
            dataType: 'json',
            success: function (data, msg, resp) {
                var $form = $("#second-form");
                $form.show().dialog({
                    resizable: false,
                    height:400,
                    width: 600,
                    modal: true,
                    title: "Recommendation added",
                    buttons: [
                        {
                            text: "OK",
                            click: doOK
                        },
                        {
                            text: "Cancel",
                            click: doCancel
                        }
                    ]
                });
            }
        })
        return false;
    });
Run Code Online (Sandbox Code Playgroud)

如果我在页面上向下滚动并提交表单,则在显示对话框时,它将页面滚动到顶部。有什么办法可以覆盖吗?

事情不是解决方案

  • 确定.ui-dialog班级的位置。它未经修改(使用Google的CDN)
  • 不能抵消事件-你可以看到,我打电话stopPropagationpreventDefault返回FALSE。因此,并不是该事件正在进行中(即使发生了,无论如何,它不是指向页面顶部的哈希链接)

使用jQuery 1.72和jQuery UI 1.8.21(各自的最新版本)。

jquery jquery-ui jquery-ui-dialog

5
推荐指数
2
解决办法
4617
查看次数

dict.pop或dict.get和评估

请考虑以下代码:

>>> def default_answer():
...     print "Default was required!"
...     return 100
... 
>>> g = { 'name': 'Jordan', 'age': 35 }
>>> result = g.get('age', default_answer())
Default was required!
>>> result = g.pop('age', default_answer())
Default was required!
Run Code Online (Sandbox Code Playgroud)

请注意,无论是否g包含预期的键,都会调用default_answer.这在程序上是有道理的,但如果default_answer计算成本很高,这将是一个麻烦(运行大量代码来创建一个将被丢弃的值).

我可以想到写这个而不总是调用的唯一方法default_answer是:

result = g.pop('age', False) or default_answer()
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?

(请注意,我知道default_answer用惰性求值替换对象也会解决部分问题,但这不在本问题的范围内).

python short-circuiting

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

基于列表显示中的自定义可调用顺序在Django Admin中进行排序

我的列表显示中有自定义可调用.我希望能够按它排序,但它不对应于单个字段,所以我不能admin_order_field单独使用它.

如果选择它作为字段,我希望能够改变查询集的顺序以反映这一点.但是,它看起来像是在通过模型管理员ChangeList调用运行它get_ordering 之后get_ordering调用,然后遍历给定的排序字段(格式a.b.c.etc.y.z中a,b,c等都是对应于显示中一个或多个字段的整数名单.

在这个例子中,我有一个订单页面,客户可以是公司/组织个人.我希望能够对它进行排序,以便首先列出人员的所有订单,然后是组织,并按字母顺序排列.

我们以此模型管理员设置为例:

class OrderAdmin(models.ModelAdmin):
    list_display = ('pk', 'date_ordered', 'customer')

    def customer(self, obj):
        return obj.organization or "%s %s" % (obj.first_name, obj.last_name)
Run Code Online (Sandbox Code Playgroud)

目前,我无法排序,因为只有在callable admin_order_field附加了一个排序字段时才可用:

    def customer(self, obj):
        return obj.organization or "%s %s" % (obj.first_name, obj.last_name)
    customer.admin_order_field = 'customer'
Run Code Online (Sandbox Code Playgroud)

问题是,理想情况下,我希望能够拦截默认代码并说"如果其中一个字段是'customer',则从列表中删除该字段,然后使用["organization", "last_name", "first_name"]" 对其进行排序".但据我所知,没有办法做到这一点.

我怀疑extra(select={'customer':...})会工作,除了我正在使用,django-pyodbc因为这是一个SQL Server数据库,生成的SQL根本不起作用,并抛出一个错误:

SELECT * 
FROM   (SELECT 

                ( COALESCE(organization, firstname + ' ' + lastname) …
Run Code Online (Sandbox Code Playgroud)

django django-admin

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

链接到emacs中的python模块

我正在研究emacs作为Eclipse的替代品.Eclipse中我最喜欢的一个功能是能够将鼠标悬停在几乎任何python对象上并获取其源代码列表,然后单击它直接转到另一个文件中的代码.

我知道这在emacs中一定是可能的,我只是想知道它是否已经在某个地方的脚本中实现,如果是的话,如何在emacs上运行它.

看起来我的版本是版本24.2.

此外,由于我将进行Django开发,如果有一个了解Django模板语法的插件,那将会很棒.

python ide django emacs

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

获取 Geonames 中 admin1 级别记录的人类可读缩写

对于美国,admin1代码对应于州的缩写,这使得进行城市、州的查找变得非常方便。

但是,对于像加拿大这样的国家/地区,admin1 代码是一个数字(例如,阿尔伯塔省为 01),无法再进行城市、州查找。我查看了加拿大的邮政编码文件,但它没有将邮政编码与该省的数字(我认为是 FIPS)代码相对应。因此,即使邮政编码文件显示艾伯塔省的 AB,它也不会显示同一记录的 01,因此无法关联这些记录。

雪上加霜的是,在邮政编码文件中,数据集实际上在 admin1 代码字段中列出了 AB,即使在另一个文件中输入为 01。很烦人。

我想知道是否有任何数据文件将一个国家/地区 admin1 记录的数字 FIPS 代码链接到其更易于理解的缩写。

geonames

5
推荐指数
0
解决办法
322
查看次数