我有以下方法:
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.为什么会这样?
我刚刚从1.2切换到trunk(写这篇文章的r15175)来玩contrib.staticfiles,现在当使用本地devserver时,我的所有管理媒体都返回404.静态媒体(由新的contrib app管理)都按预期工作,但是我希望能够将admin与dev服务器一起使用,以便在dev代码更改时不必重新启动本地apache实例.
这是已知行为吗?我没有在IRC得到回复.
编辑:似乎与以下内容有关:管理媒体在开发模式下运行django trunk时消失,但似乎没有真正的答案.
注意:如果你想通过告诉我你不喜欢django.contrib.auth来回答这个问题,请继续.这没有用.我很清楚这个问题的意见范围和力度.
现在,问题是:
惯例是使用OneToOne to User创建一个模型UserProfile.
在我能想到的各种方式中,一种更有效和更有效的方法是将User子类化为一个打算用于系统中每个人的类 - 一个名为Person(User)的类.
我没有看到为什么前者是传统的而后者被视为黑客的连贯解释.不久之前,我改用了OneToOne方法,以便获得使用get_profile()的能力,从此我就后悔了.除非我能理解这种方法的优点,否则我正在考虑转回去.
django django-models django-contrib django-authentication django-users
我在tests目录下找到了一些,但我不确定它们是否是正确的.
通过认证的模板我的意思是login.htm,password_reset.htm等
一些模板可以在以下网址找到:http://devdoodles.wordpress.com/2009/02/16/user-authentication-with-django-registration/
目前,如果表单上有任何错误,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的情况下更改此行为?
任何指针都会被赞赏......
谢谢!
我正在尝试为密码重置流程实施集成测试,但我被困在“ 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
标题可能令人困惑,但请让我解释一下:
目前,当我存储电话号码与原始数字,如5554441234.然后在我的模板中,我将数字"格式化"为类似的东西555-444-1234.
我在Django中意识到localflavor,有一个美国电话号码字段,用于检查字符串是否XXX-XXX-XXXX格式化.
所以我的问题是我应该输入电话号码作为原始数字然后在模板中格式化,还是应该使用localflavor以格式化方式输入电话号码?
如果我选择后者,XXX-XXX-XXXX格式限制是否适用于database API级别或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
不确定,但我认为这可能是一个错误?
这是我的模型:
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
我不知道我是否混淆了目的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 ×10
django-contrib ×10
python ×4
django-forms ×2
django-users ×2
django-1.4 ×1
django-views ×1
postal-code ×1