在另一篇文章中,我提到我试图使用allauth的email_confirmed信号将确认用户的is_active字段更改为true.但是,以下代码给了我异常"用户匹配查询不存在".
from allauth.account.signals import email_confirmed
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(email_confirmed)
def email_confirmed_(request, email_address, **kwargs):
user = User.objects.get(email=email_address)
user.is_active = True
user.save()
Run Code Online (Sandbox Code Playgroud)
我试图重新执行此操作,但仍然遇到类似的异常,"EmailAddress匹配查询不存在."
from allauth.account.signals import email_confirmed
from django.dispatch import receiver
from django.contrib.auth.models import User
from allauth.account.models import EmailAddress
@receiver(email_confirmed)
def email_confirmed_(request, email_address, **kwargs):
new_email_address = EmailAddress.objects.get(email=email_address)
user = User.objects.get(new_email_address.user)
user.is_active = True
user.save()
Run Code Online (Sandbox Code Playgroud)
Traceback在这里:
Environment:
Request Method: POST
Request URL: http://www.website.com/accounts/confirm-email/5901011619071fce757447ba146fe6312cb27bc0fee34d29665b857b479b49fc/
Django Version: 1.6.1
Python Version: 3.3.2
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages', …Run Code Online (Sandbox Code Playgroud) 我正在实现自定义404和500模板,但是404.html模板似乎返回request.user.is_authenticated很好,但是500.html模板无法返回任何内容。我还检查了request.user,它在500页上只是空白。
这很奇怪,因为当我触发500错误时,我收到了预期的错误报告电子邮件,并且显然在请求明细中正确定义了USER。这是我在views.py中使用的代码:
def handler404(request):
response = render_to_response('404.html', {},
context_instance=RequestContext(request))
response.status_code = 404
return response
def handler500(request):
response = render_to_response('500.html', {},
context_instance=RequestContext(request))
response.status_code = 500
return response
Run Code Online (Sandbox Code Playgroud)
我想知道后台(也许在RequestContext中)是否在处理500与404不同的问题?我应该提到,我也在使用django-guardian,尽管我认为这不会影响任何情况。有任何想法吗?
编辑: 此评论声称“ 500模板将不会呈现request.user,因为它报告了500服务器错误,因此服务器无法提供任何服务。” 有谁知道解决这个问题的方法吗?似乎应该有一个,因为,就像我说的那样,我在错误报告电子邮件中收到的日志显然带有带有用户名的请求对象。
编辑2:现在我想知道它是否与django-allauth有关-我也在使用它。
django django-templates django-errors django-allauth django-1.6
我主要使用django-allauth作为管理后端创建用户帐户的方法.我想要发生的是:
1)当用户完成注册程序时,发出验证电子邮件(我到目前为止工作)并将用户设置为非活动状态,工作人员,并通过defult分配给他们的"SurveyManager"组.目前,创建用户时将活动设置为true,将staff设置为false,并且不分配任何组.
2)单击电子邮件中的链接以验证其地址后,我希望将用户设置为活动状态,以便他们可以通过管理员后端登录.
我的具体问题是我不知道:1)如何或在何处设置用户的活动,人员和组的默认值 - 我想这可以在models.py文件中完成,但我的理解是用户模型包含在auth app中; 2)一旦电子邮件验证完成,如何触发代码将用户活动标志更改为true.
在此先感谢 - 如果这是一个创建不好的帖子,对不起,这是我的第一个!
我正在使用 django-allauth 登录页面将用户登录到我的管理面板。这工作正常,但是当他们从管理面板注销时,我希望他们被直接发送回 /accounts/login/ 页面(最好是 /accounts/login/?next=/admin/surveys/survey/),而不是而不是 /admin/logout/ 页面,上面写着“感谢您在网站上度过了美好的时光。” 我在我的设置文件中尝试了 LOGOUT_URL 属性,但它似乎没有做我上面描述的事情。这是我的一些相关代码:
# urls.py
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
from mysite import views
from django.contrib import admin
admin.autodiscover()
from django.contrib.auth.decorators import login_required
admin.site.login = login_required(admin.site.login)
from django.contrib.auth import views as auth_views
urlpatterns = patterns('',
url(r'^$', TemplateView.as_view(template_name='landingpage.html'), name='landingpage'),
url(r'^surveys/', include('surveys.urls', namespace="surveys")),
url(r'^admin/', include(admin.site.urls)),
url(r'^submitfeedback/$', views.submitfeedback, name='submitfeedback'),
# tried this but it didn't work: url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/accounts/login/'}),
# tried this but it didn't work: url(r'^admin/logout/$', …Run Code Online (Sandbox Code Playgroud) 通过实现以下代码,我能够删除“保存并添加另一个”和“保存并继续编辑”按钮:
# At the start of my admin.py file I have:
from django.contrib.admin.templatetags.admin_modify import *
from django.contrib.admin.templatetags.admin_modify import submit_row as original_submit_row
@register.inclusion_tag('admin/submit_line.html', takes_context=True)
def submit_row(context):
ctx = original_submit_row(context)
ctx.update({
'show_save_and_add_another': context.get('show_save_and_add_another', ctx['show_save_and_add_another']),
'show_save_and_continue': context.get('show_save_and_continue', ctx['show_save_and_continue'])
})
return ctx
class MyModelAdmin(GuardedModelAdmin):
# Then inside MyModelAdmin I have this:
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['show_save_and_add_another'] = False
extra_context['show_save_and_continue'] = False
return super(MyModelAdmin, self).change_view(request, object_id,
form_url, extra_context=extra_context)
Run Code Online (Sandbox Code Playgroud)
当我使用我的 change_view 时,这很有效,但是当我添加模型的新实例时,按钮会重新出现。我尝试了以下方法:
def add_view(self, request, form_url='', extra_context=None):
extra_context = …Run Code Online (Sandbox Code Playgroud) django django-templates django-admin django-guardian django-1.6
我有一个Survey和一个Choice模型,每个调查都有许多与之相关的选择.当我使用所有选项呈现实际的HTML调查页面时,我使用以下Django模板代码:
{% for choice in survey.choice_set.all %}
<li class="ui-state-default" choice_id={{ choice.id }}>{{ choice.choice_text }}</li>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
然而,我不希望每次都以相同的顺序出现选择,而是希望它们以随机顺序填充以减少任何潜在的偏差效应(例如,有人可能更有可能投票选出首先出现在列表中的选项).
如果有一种方法可以在模板本身内执行此操作,那就太棒了,但似乎我更需要在views.py中的后端执行某些操作.我已经试过这个,没有效果:
class DetailView(generic.DetailView):
model = Survey
...
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
...
survey = get_object_or_404(Survey, survey_link__iexact=survey_link)
...
if randomize_choice_order:
survey.choice_set.order_by('?')
...
return context
Run Code Online (Sandbox Code Playgroud)
知道我怎么能做到这一点?也许我需要开发一个JS函数来在对象已经放置后随机化它们?
我正在使用带有 JDK 12.0.1 和org.beryx.jlink插件 (2.10.4) 的Gradle(4.10.3,但我已经尝试了 5.4.1 之前的大多数版本),但是每次我尝试创建jlink图片:
-> 任务:createMergedModule
无法从服务加载器调用中派生使用子句:com/fasterxml/jackson/databind/ObjectMapper$2.run()。
无法从服务加载器调用中派生使用子句:com/fasterxml/jackson/databind/ObjectMapper.secureGetServiceLoader()。
无法从以下位置的服务加载器调用派生使用子句:org/apache/commons/compress/utils/ServiceLoaderIterator.()。
C:\Users\MyName\IdeaProjects\myapp\build\jlinkbase\tmpjars\myapp.merged.module\module-info.java:393: 错误:服务实现没有默认构造函数:XBeansXPath 提供 org.apache.xmlbeans .impl.store.PathDelegate.SelectPathInterface 与 org.apache.xmlbeans.impl.xpath.saxon.XBeansXPath;
C:\Users\MyName\IdeaProjects\myapp\build\jlinkbase\tmpjars\myapp.merged.module\module-info.java:394: 错误:服务实现没有默认构造函数:XBeansXQuery 提供 org.apache.xmlbeans .impl.store.QueryDelegate.QueryInterface 与 org.apache.xmlbeans.impl.xquery.saxon.XBeansXQuery;2 错误
-> 任务:createMergedModule 失败
当我点击在合并中抛出错误的行时module-info.java,它指向这两个:
provides org.apache.xmlbeans.impl.store.PathDelegate.SelectPathInterface with org.apache.xmlbeans.impl.xpath.saxon.XBeansXPath;
provides org.apache.xmlbeans.impl.store.QueryDelegate.QueryInterface with org.apache.xmlbeans.impl.xquery.saxon.XBeansXQuery;
Run Code Online (Sandbox Code Playgroud)
我的build.gradle文件看起来像这样:
plugins {
id 'application'
id 'idea'
id 'java'
id 'org.openjfx.javafxplugin' version '0.0.7'
id 'org.beryx.jlink' version '2.10.4'
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-csv:1.6'
compile 'org.apache.poi:poi-ooxml:4.1.0'
compile 'com.fasterxml.jackson.core:jackson-core:2.9.9'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.9'
compile 'com.fasterxml.jackson.core:jackson-databind:2.9.9' …Run Code Online (Sandbox Code Playgroud) django ×6
django-admin ×4
django-1.6 ×2
gradle ×1
html ×1
java ×1
javafx ×1
jlink ×1
python ×1
python-3.x ×1
xmlbeans ×1