- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Following is view.py which includes
signup/loginview
view.py
from accounts.forms import SettingsForm
from accounts.mixins import LoginRequiredMixin
from accounts.models import SignupCode, EmailAddress, EmailConfirmation, Account, AccountDeletion
from accounts.utils import default_redirect,user_display
class SignupView(FormView):
template_name = "account/signup.html"
template_name_ajax = "account/ajax/signup.html"
template_name_email_confirmation_sent = "account/email_confirmation_sent.html"
template_name_email_confirmation_sent_ajax = "account/ajax/email_confirmation_sent.html"
template_name_signup_closed = "account/signup_closed.html"
template_name_signup_closed_ajax = "account/ajax/signup_closed.html"
form_class = SignupForm
form_kwargs = {}
redirect_field_name = "next"
messages = {
"email_confirmation_sent": {
"level": messages.INFO,
"text": _("Confirmation email sent to %(email)s.")
},
"invalid_signup_code": {
"level": messages.WARNING,
"text": _("The code %(code)s is invalid.")
}
}
def __init__(self, *args, **kwargs):
self.created_user = None
kwargs["signup_code"] = None
super(SignupView, self).__init__(*args, **kwargs)
def get(self, *args, **kwargs):
if self.request.user.is_authenticated():
return redirect(default_redirect(self.request, AccountAppConf.LOGIN_REDIRECT_URL))
if not self.is_open():
return self.closed()
return super(SignupView, self).get(*args, **kwargs)
def post(self, *args, **kwargs):
if not self.is_open():
return self.closed()
return super(SignupView, self).post(*args, **kwargs)
def get_initial(self):
initial = super(SignupView, self).get_initial()
if self.signup_code:
initial["code"] = self.signup_code.code
if self.signup_code.email:
initial["email"] = self.signup_code.email
return initial
def get_template_names(self):
if self.request.is_ajax():
return [self.template_name_ajax]
else:
return [self.template_name]
def get_context_data(self, **kwargs):
ctx = kwargs
redirect_field_name = self.get_redirect_field_name()
ctx.update({
"redirect_field_name": redirect_field_name,
"redirect_field_value": self.request.REQUEST.get(redirect_field_name),
})
return ctx
def get_form_kwargs(self):
kwargs = super(SignupView, self).get_form_kwargs()
kwargs.update(self.form_kwargs)
return kwargs
def form_invalid(self, form):
signals.user_sign_up_attempt.send(
sender=SignupForm,
username=form.data.get("username"),
email=form.data.get("email"),
result=form.is_valid()
)
return super(SignupView, self).form_invalid(form)
def form_valid(self, form):
self.created_user = self.create_user(form, commit=False)
# prevent User post_save signal from creating an Account instance
# we want to handle that ourself.
self.created_user._disable_account_creation = True
self.created_user.save()
email_address = self.create_email_address(form)
if AccountAppConf.EMAIL_CONFIRMATION_REQUIRED and not email_address.verified:
self.created_user.is_active = False
self.created_user.save()
self.create_account(form)
self.after_signup(form)
if AccountAppConf.EMAIL_CONFIRMATION_EMAIL and not email_address.verified:
email_address.send_confirmation()
if AccountAppConf.EMAIL_CONFIRMATION_REQUIRED and not email_address.verified:
return self.email_confirmation_required_response()
else:
show_message = [
AccountAppConf.EMAIL_CONFIRMATION_EMAIL,
self.messages.get("email_confirmation_sent"),
not email_address.verified
]
if all(show_message):
messages.add_message(
self.request,
self.messages["email_confirmation_sent"]["level"],
self.messages["email_confirmation_sent"]["text"] % {
"email": form.cleaned_data["email"]
}
)
self.login_user()
return redirect(self.get_success_url())
def get_success_url(self, fallback_url=None, **kwargs):
if fallback_url is None:
fallback_url = AccountAppConf.SIGNUP_REDIRECT_URL
kwargs.setdefault("redirect_field_name", self.get_redirect_field_name())
return default_redirect(self.request, fallback_url, **kwargs)
def get_redirect_field_name(self):
return self.redirect_field_name
def create_user(self, form, commit=True, **kwargs):
user = User(**kwargs)
username = form.cleaned_data.get("username")
if username is None:
username = self.generate_username(form)
user.username = username
user.email = form.cleaned_data["email"].strip()
password = form.cleaned_data.get("password")
if password:
user.set_password(password)
else:
user.set_unusable_password()
if commit:
user.save()
return user
def create_account(self, form):
return Account.create(request=self.request, user=self.created_user, create_email=False)
def generate_username(self, form):
raise NotImplementedError("Unable to generate username by default. "
"Override SignupView.generate_username in a subclass.")
def create_email_address(self, form, **kwargs):
kwargs.setdefault("primary", True)
kwargs.setdefault("verified", False)
if self.signup_code:
self.signup_code.use(self.created_user)
kwargs["verified"] = self.signup_code.email and self.created_user.email == self.signup_code.email
return EmailAddress.objects.add_email(self.created_user, self.created_user.email, **kwargs)
def after_signup(self, form):
signals.user_signed_up.send(sender=SignupForm, user=self.created_user, form=form)
def login_user(self):
# set backend on User object to bypass needing to call auth.authenticate
self.created_user.backend = "django.contrib.auth.backends.ModelBackend"
auth.login(self.request, self.created_user)
self.request.session.set_expiry(0)
def is_open(self):
code = self.request.REQUEST.get("code")
if code:
try:
self.signup_code = SignupCode.check(code)
except SignupCode.InvalidCode:
if self.messages.get("invalid_signup_code"):
messages.add_message(
self.request,
self.messages["invalid_signup_code"]["level"],
self.messages["invalid_signup_code"]["text"] % {
"code": code
}
)
return AccountAppConf.OPEN_SIGNUP
else:
return True
else:
return AccountAppConf.OPEN_SIGNUP
def email_confirmation_required_response(self):
if self.request.is_ajax():
template_name = self.template_name_email_confirmation_sent_ajax
else:
template_name = self.template_name_email_confirmation_sent
response_kwargs = {
"request": self.request,
"template": template_name,
"context": {
"email": self.created_user.email,
"success_url": self.get_success_url(),
}
}
return self.response_class(**response_kwargs)
def closed(self):
if self.request.is_ajax():
template_name = self.template_name_signup_closed_ajax
else:
template_name = self.template_name_signup_closed
response_kwargs = {
"request": self.request,
"template": template_name,
}
return self.response_class(**response_kwargs)
class LoginView(FormView):
template_name = "account/login.html"
template_name_ajax = "account/ajax/login.html"
form_class = LoginUsernameForm
form_kwargs = {}
redirect_field_name = "next"
def get(self, *args, **kwargs):
if self.request.user.is_authenticated():
return redirect(self.get_success_url())
return super(LoginView, self).get(*args, **kwargs)
def get_template_names(self):
if self.request.is_ajax():
return [self.template_name_ajax]
else:
return [self.template_name]
def get_context_data(self, **kwargs):
ctx = kwargs
redirect_field_name = self.get_redirect_field_name()
ctx.update({
"redirect_field_name": redirect_field_name,
"redirect_field_value": self.request.REQUEST.get(redirect_field_name),
})
return ctx
def get_form_kwargs(self):
kwargs = super(LoginView, self).get_form_kwargs()
kwargs.update(self.form_kwargs)
return kwargs
def form_invalid(self, form):
signals.user_login_attempt.send(
sender=LoginView,
username=form.data.get(form.identifier_field),
result=form.is_valid()
)
return super(LoginView, self).form_invalid(form)
def form_valid(self, form):
self.login_user(form)
self.after_login(form)
return redirect(self.get_success_url())
def after_login(self, form):
signals.user_logged_in.send(sender=LoginView, user=form.user, form=form)
def get_success_url(self, fallback_url=None, **kwargs):
if fallback_url is None:
fallback_url = AccountAppConf.LOGIN_REDIRECT_URL
kwargs.setdefault("redirect_field_name", self.get_redirect_field_name())
return default_redirect(self.request, fallback_url, **kwargs)
def get_redirect_field_name(self):
return self.redirect_field_name
def login_user(self, form):
auth.login(self.request, form.user)
expiry = AccountAppConf.REMEMBER_ME_EXPIRY if form.cleaned_data.get("remember") else 0
self.request.session.set_expiry(expiry)
Following is
account/url.py
given by Pinax
account/url.py
from accounts.views import SignupView, LoginView, LogoutView, DeleteView
from accounts.views import ConfirmEmailView
from accounts.views import ChangePasswordView, PasswordResetView, PasswordResetTokenView
from accounts.views import SettingsView,Signup_login
urlpatterns = patterns("",
url(r"^signup/$", SignupView.as_view(), name="account_signup"),
url(r"^login/$", LoginView.as_view(), name="account_login"),
url(r"^logout/$", LogoutView.as_view(), name="account_logout"),
url(r"^confirm_email/(?P<key>\w+)/$", ConfirmEmailView.as_view(), name="account_confirm_email"),
url(r"^password/$", ChangePasswordView.as_view(), name="account_password"),
url(r"^password/reset/$", PasswordResetView.as_view(), name="account_password_reset"),
url(r"^password/reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$", PasswordResetTokenView.as_view(), name="account_password_reset_token"),
url(r"^settings/$", SettingsView.as_view(), name="account_settings"),
url(r"^delete/$", DeleteView.as_view(), name="account_delete"),
url(r"^signup.login/$", Signup_login.as_view(), name="Signup_login"),
)
And following is my project's
app/url.py
url.py
urlpatterns = patterns("",
url(r"^$",SignupView.as_view(template_name="homepage.html"), name="account_signup"),
url(r"^$", LoginView.as_view(template_name="homepage.html"), name="account_login"),
url(r"^admin/", include(admin.site.urls)),
url(r"^account/", include("accounts.urls")),
)
我正在尝试做的事情:调用 homepage.html
上的两个 View 。它在单个 html 中包含两种形式。
最佳答案
不要这样做。试着全神贯注于浏览器和网络服务器之间发生的事情。 URL 标识服务器将返回给客户端的内容。调用 2 个“ View ”违反了该原则。
您真正想要做的是创建一个新的 URL,或者修改模板以将两个表单放在同一页面上。我可能会重命名 SignupOrLoginView 并在该单一 View 中完成注册工作。
这在功能 View 中会更容易理解,而不是基于类的 View ,后者似乎将您限制在单一形式。
关于python - 如何在pinax中调用一个url的多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765224/
我正在开发一个个人项目。该项目已“完成”,但现在我想添加一个社交应用程序。我认为 pinax 已准备好完成这项任务。我想知道一些事情: 我可以在我的项目中像 django 应用程序一样使用 pinax
我正在尝试了解 Pinax 并计划在我的下一个项目中使用它。 我已经开始了一个pinax 基础项目,现在我有一些东西要用到runserver。 现在,我明白我可以自定义从 pinax 获得的初始设置,
这是一个类似的问题, Django "and" Pinax or just Pinax? 其中一个答案指定了文档链接,但该文档没有描述如何将 Pinax 应用程序插入单独的项目。或者我只是在那里找不到
我想在用户注册时收集更多信息,并将其显示为个人资料信息的一部分 - 以便用户在创建登录后可以对其进行编辑。 如何在不直接更改 pinax 代码的情况下扩展注册和个人资料表单及模型? 最佳答案 来自 p
有谁知道有关 Pinax 注册和“帐户”的文档的良好链接。我正在尝试研究如何在 Django/Pinax 中实现我们的注册过程,并试图在 Django 的 User 和 Profile 类与 Pina
我观看了 James Tauber 和 pydanny 在 DjangoCon 2009 上关于 pinax 的演讲,并听说了 pinax 的组。但我没有得到他们描述的实际用例,即使在阅读了 docu
如何为 Pinax 创建新页面安装后。 最佳答案 Django/Pinax 应用程序中的大多数页面将以“正常”django 方式创建,即通过编写渲染到模板的 View 来动态创建。如果您想要平面页面,
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我想运行一个基于 Pinax 社交项目的项目。而且我想让用户使用facebook帐户登录,不仅可以使用facebook信息在我的网站上注册,还可以从facebook中获取现有的好友列表。所以用户不需要
我正在按照 pinax-project-account 入门的确切说明进行操作。您可以在 [此处][1] 看到它们。我刚刚创建了我的虚拟环境并安装了要求。我运行此命令时出现的问题:django-adm
我想将 Pinax 用于一个小项目,但我很困惑,因为我不知道是否可以扩展/更改所提供应用程序的行为和功能。是否有用于扩展捆绑应用程序行为的任何文档? 示例:在注册申请中,我想添加自定义字段,但我无法找
Pinax 包包装了一些非常奇特的东西。是否有无需安装/设置 Pinax 即可浏览的现场演示? 最佳答案 提到了 sites built with pinax在他们的项目页面本身。您可能想要选择任何网
我最近发现了Pinax这似乎是一个 django 堆栈,其中添加了最常用的应用程序,因此可以轻松加快开发速度。 我以前从未使用或听说过 Pinax,想知道您是否对此有任何反馈。我喜欢 Django,并
我刚刚安装了 Pinax,并且想尝试一些外部启动项目(而不是 Pinax 提供的四个基本项目)。他们的文档链接到 this page ,但它不显示外部项目列表,而是仅链接回同一页面。 所以我的问题是,
有没有办法在没有 virtualenv 的情况下运行 Pinax? 我想在没有 virtualenv 的情况下运行它,因为我想在 mediatemples 网格托管服务的 django-contain
我是第一次使用 pinax 模板。我正在关注文档。 我开始了这个元素。是否提到了所有内容 here . 问题是页面已显示,但未加载 css 和 javascript 文件。 浏览器控制台给出错误提示
明天开始我的项目时,我将开始研究这个问题,但有人能给我指出正确的方向吗? (也许一些集成代码和/或使用 Pinax 作为后端的示例 Pyjamas 界面——如果可能的话,所有这些都有充分的解释?:)
我可以安装吗 Pinax在 Windows 环境中?有简单的方法吗?您推荐哪种环境? 最佳答案 我安装了 pinax 0.7rc1 并在 Windows 7 上工作,没有任何问题。 观看此视频,了解有
我想在没有 PINAX 的情况下使用 django-mailer。当我运行 ./manager.py send_mail它打印: Unknown command: 'send_mail'Type 'm
我正在尝试在我的 Django 项目中创建推荐系统。我发现这个任务非常有趣的应用程序( pinax-referrals )并想测试它。 从文档中不清楚如何正确使用它,也没有例子。据我了解,我们需要采取
我是一名优秀的程序员,十分优秀!