标签: django-contrib

request.user返回一个SimpleLazyObject,我如何"唤醒"它?

我有以下方法:

def _attempt(actor):
    if actor.__class__ != User:
        raise TypeError
Run Code Online (Sandbox Code Playgroud)

从视图中调用:

self.object.attempt(self.request.user)
Run Code Online (Sandbox Code Playgroud)

如您所见,_attempt方法期望actor是类型django.contrib.auth.models.User,但是对象看起来是类型django.utils.functional.SimpleLazyObject.为什么会这样?更重要的是,如何将LazyObject(显然是一种User对象的包装器)转换为User对象?

有关详细信息,Request.user请访问:https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.user此文档似乎表明request.user应该是一个User对象......

======进行后期编辑=====

我现在有以下方法:

def _attempt(obj, action, actor, msg): 
    actor.is_authenticated() 
    if isinstance(actor, LazyObject): 
        print type(actor) 
Run Code Online (Sandbox Code Playgroud)

我正在传递一个用户,但if条件仍然是真的,演员仍然是LazyObject.为什么会这样?

python django django-contrib django-users

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

contrib.staticfiles和Django管理媒体

我刚刚从1.2切换到trunk(写这篇文章的r15175)来玩contrib.staticfiles,现在当使用本地devserver时,我的所有管理媒体都返回404.静态媒体(由新的contrib app管理)都按预期工作,但是我希望能够将admin与dev服务器一起使用,以便在dev代码更改时不必重新启动本地apache实例.

这是已知行为吗?我没有在IRC得到回复.

编辑:似乎与以下内容有关:管理媒体在开发模式下运行django trunk时消失,但似乎没有真正的答案.

django django-contrib

9
推荐指数
1
解决办法
2563
查看次数

Django:为什么要创建一个OneToOne到UserProfile而不是子类化auth.User?

注意:如果你想通过告诉我你不喜欢django.contrib.auth来回答这个问题,请继续.这没有用.我很清楚这个问题的意见范围和力度.

现在,问题是:

惯例是使用OneToOne to User创建一个模型UserProfile.

在我能想到的各种方式中,一种更有效和更有效的方法是将User子类化为一个打算用于系统中每个人的类 - 一个名为Person(User)的类.

我没有看到为什么前者是传统的而后者被视为黑客的连贯解释.不久之前,我改用了OneToOne方法,以便获得使用get_profile()的能力,从此我就后悔了.除非我能理解这种方法的优点,否则我正在考虑转回去.

django django-models django-contrib django-authentication django-users

9
推荐指数
1
解决办法
2969
查看次数

Django是否附带用于django.contrib.auth模块的身份验证模板?

我在tests目录下找到了一些,但我不确定它们是否是正确的.

通过认证的模板我的意思是login.htm,password_reset.htm

一些模板可以在以下网址找到:http://devdoodles.wordpress.com/2009/02/16/user-authentication-with-django-registration/

python django django-contrib

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

django评论:如何防止表单错误将用户重定向到预览页面?

目前,如果表单上有任何错误,django.contrib.comments会将用户发送到预览页面.

我在博客的上下文中使用评论,我宁愿用户留在他们所在的页面上,如果提交有问题.据我所知,这在django.contrib.comments.views.comments.post_comment中是硬编码的:

# If there are errors or if we requested a preview show the comment
if form.errors or preview:
    template_list = [
        "comments/%s_%s_preview.html" % tuple(str(model._meta).split(".")),
        "comments/%s_preview.html" % model._meta.app_label,
        "comments/preview.html",
    ]
    return render_to_response(
        template_list, {
            "comment" : form.data.get("comment", ""),
            "form" : form,
            "next": next,
        },
        RequestContext(request, {})
    )
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以在不将源代码更改为django.contrib.comments的情况下更改此行为?

任何指针都会被赞赏......

谢谢!

python django django-contrib

7
推荐指数
1
解决办法
1276
查看次数

无法为 Django 的重置密码流程创建集成测试

我正在尝试为密码重置流程实施集成测试,但我被困在“ password_reset_confirm ”视图中。我已经手动测试了流程,它工作正常。不幸的是,Django 单元测试客户端似乎无法正确遵循此视图中所需的重定向。

网址配置

from django.contrib.auth import views as auth_views


url(r"^accounts/password_change/$",
    auth_views.PasswordChangeView.as_view(),
    name="password_change"),
url(r"^accounts/password_change/done/$",
    auth_views.PasswordChangeDoneView.as_view(),
    name="password_change_done"),
url(r"^accounts/password_reset/$",
    auth_views.PasswordResetView.as_view(email_template_name="app/email/accounts/password_reset_email.html",
                                         success_url=reverse_lazy("app:password_reset_done"),
                                         subject_template_name="app/email/accounts/password_reset_subject.html"),
    name="password_reset"),
url(r"^accounts/password_reset/done/$",
    auth_views.PasswordResetDoneView.as_view(),
    name="password_reset_done"),
url(r"^accounts/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$",
    auth_views.PasswordResetConfirmView.as_view(
        success_url=reverse_lazy("app:password_reset_complete"),
        form_class=CustomSetPasswordForm),
    name="password_reset_confirm"),
url(r"^accounts/reset/complete/$",
    auth_views.PasswordResetCompleteView.as_view(),
    name="password_reset_complete"),
Run Code Online (Sandbox Code Playgroud)

测试代码

import re
from django.urls import reverse, NoReverseMatch
from django.test import TestCase, Client
from django.core import mail
from django.test.utils import override_settings
from django.contrib.auth import authenticate

VALID_USER_NAME = "username"
USER_OLD_PSW = "oldpassword"
USER_NEW_PSW = "newpassword"
PASSWORD_RESET_URL = reverse("app:password_reset")

def PASSWORD_RESET_CONFIRM_URL(uidb64, token):
    try:
        return reverse("app:password_reset_confirm", args=(uidb64, token))
    except NoReverseMatch: …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-views django-contrib django-authentication

7
推荐指数
1
解决办法
1059
查看次数

在Django中存储电话号码时,我应该将它们存储为原始数字还是使用django.contrib.localflavor?

标题可能令人困惑,但请让我解释一下:

目前,当我存储电话号码与原始数字,如5554441234.然后在我的模板中,我将数字"格式化"为类似的东西555-444-1234.

我在Django中意识到localflavor,有一个美国电话号码字段,用于检查字符串是否XXX-XXX-XXXX格式化.

所以我的问题是我应该输入电话号码作为原始数字然后在模板中格式化,还是应该使用localflavor以格式化方式输入电话号码

如果我选择后者,XXX-XXX-XXXX格式限制是否适用于database API级别或Django管理页面?

python django django-models django-forms django-contrib

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

仅在Django中测试项目

当我尝试python manage.py test在我的Django(1.4)项目中运行时,我收到错误:

ERROR: test_site_profile_not_available (django.contrib.auth.tests.models.ProfileTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/slacy/src/tmp/env/local/lib/python2.7/site-packages/django/contrib/auth/tests/models.py", line 29, in test_site_profile_not_available
    del settings.AUTH_PROFILE_MODULE
  File "/home/slacy/src/tmp/env/local/lib/python2.7/site-packages/django/utils/functional.py", line 215, in __delattr__
    delattr(self._wrapped, name)
AttributeError: AUTH_PROFILE_MODULE
Run Code Online (Sandbox Code Playgroud)

这是记录在一个Django的bug,用recomendation只测试特定的应用程序,而不是全部.但是我的项目没有应用程序,models.py只是简单地驻留在项目根目录中.要在Django中测试特定的应用程序,它看起来像这样:

$ ./manage.py test animals
Note that we used animals, not myproject.animals.
Run Code Online (Sandbox Code Playgroud)

意味着无法指定要测试的根目录.我如何测试我的项目目录?

请注意,此错误是有关单元测试发现更大讨论的一部分.

django django-contrib django-testing django-contenttypes django-1.4

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

邮政编码模型字段在管理员中显示为状态列表

不确定,但我认为这可能是一个错误?

这是我的模型:

class Property(models.Model):
Name = models.CharField(max_length=40)
Description = models.TextField(default="Description Not Available")
Address = models.CharField(max_length=60, default="Not Available")
Address2 = models.CharField(max_length=60,null=True)
City = models.CharField(max_length=60, null=True)
State = usa_model.USStateField(null=True)
Code = usa_model.USPostalCodeField(null=True)
Phone = usa_model.PhoneNumberField(null=True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我错过了什么吗?

-Kerry

django postal-code django-contrib

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

Django:"collectstatic"是否也应该收集媒体文件?

我不知道我是否混淆了目的collectstatic.这是我的设置模块:

# BASE_DIR is the location of my django project folder

STATIC_URL = '/this.static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "ve_static_root")
STATICFILES_DIRS = (

    os.path.join(BASE_DIR, "this.static"),
    os.path.join(BASE_DIR, "this.media"),

                    )
MEDIA_URL = '/this.media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "ve_media_root")
Run Code Online (Sandbox Code Playgroud)

在这里,我放置了我的静态文件和媒体文件,STATICFILES_DIRS以便在我回忆/将图像嵌入到我的降价文档中时,可以使用媒体文件作为简单参考,但正如您所看到的,我为MEDIA_ROOT创建了一条路径,这需要与STATIC_ROOT不同.我担心的是,我把我的媒体文件夹,this.media中,在STATICFILES_DIRS文件夹中,这让我打电话给图像或视频到Django的使用这些staticfile过滤模板,像{% static 'image/file/path/here' %}.尽管如此,我还想知道如果所有文件,图像/视频和网页设计文件都进入STATIC_ROOT,MEDIA_ROOT的重点是什么?据我所知,Django没有collectmedia命令,所以我真的没有任何东西收集到MEDIA_ROOT文件夹中.我只是把它拿出来,空虚和所有.

我错过了这个吗?任何人都了解Django对此的看法?你的观点是什么?我不确定是否collectstatic应该涉及收集媒体文件,特别是当我有MEDIA_ROOT时.我查看了静态文件的文档,它们对于媒体文件确实不是很有帮助.

django django-contrib django-settings django-staticfiles

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