小编Sea*_*ean的帖子

MongoEngine - 如何自定义用户模型/自定义后端进行身份验证()

摘要

如何使用Django + MongoEngine 自定义用户模型自定义身份验证后端(以允许电子邮件/密码身份验证)? (是否需要自定义后端?...即,在使用MongoEngine进行身份验证时使用电子邮件作为用户名.)

在使用Django进行身份验证时,使用Mongo作为主数据存储区时,是否存在使用自定义用户对象的直接(且完整!)示例的文档?(Postgres有更清晰,更全面的文档...)


详情

MongoEngine似乎只为您提供两种身份验证 - "经典"(又名" mongoengine.django.auth.MongoEngineBackend ")方式......或者......"自定义用户模型"(又名' django.contrib.auth) .backends.ModelBackend ')方式 - 在Nicolas Cortot对这里的另一个问题的回答中或多或少简洁地概述了这两种方式:

Python-Social-Auth失败了mongoEngine(Django)

这两种身份验证技术都允许您访问类似于Django的AbstractBaseUser类的authenticate()方法 - 一种依赖于check_password函数的方法.但是,你分钟使用身份验证(如上面的链接概述)的所谓的"自定义用户模型"的味道...... 随后一对用自定义后端(为了使用电子邮件,要求用户名)......你由于无法访问典型的authenticate()函数而遇到麻烦.

例如,像这样......

accounts.models.py


# ...with postgres, I'd subclass AbstractBaseUser...but with Mongo...(?)

from django.conf import settings
from mongoengine.fields import EmailField, BooleanField 
from mongoengine.django.auth import User class MyUser(User): email = EmailField(max_length=254, unique=True) is_active = BooleanField(default=True) is_admin = BooleanField(default=False) USERNAME_FIELD = 'email' REQUIRED_FIELDS = '' ... …

authentication django custom-backend mongoengine

13
推荐指数
1
解决办法
3207
查看次数

Flask-Admin +(Flask-Login和/或Flask-Principal)

可以通过Flask-LoginFlask-Principal插件将身份验证和授权集成到Flask中.(或者也可能通过Flask-Security插件.)

但是:Flask-Admin - 另一个提供后端仪表板的插件 - 不是注册的蓝图......而且,我相信(据我所知),Flask-Login和Flask-Principal使用的装饰器 - 和这是用户访问渲染视图所必需的...那些装饰器仅对作为已注册蓝图一部分的视图进行操作.

两个问题:

1)如何在我的应用程序中注册Flask-Admin作为蓝图,和/或启用Flask-Login和/或Flask-Principal装饰器来保护与Flask-Admin相关的视图?

2)为什么Flask-Login和Flask-Principal仅适用于我的应用程序"本机"部分的对象...而不是从插件导入的对象(例如"Admin"对象)?我怎样才能解决这个问题...如果我确实正确地理解它?

我认为这是一个问题,因为我为我的应用程序的主索引页面创建受保护的视图,或者任何其他具有蓝图内部视图的页面都没有任何问题.我似乎无法为Flask-Admin索引页面执行此操作(同样,它没有蓝图).

python import plugins flask

10
推荐指数
1
解决办法
8453
查看次数

在Flask/WTForms/Google App Engine中格式化博客文章

这是简短的问题:

我的博客发表于......

http://www.seanbradley.biz/blog

......完全没有格式化.它们只是一大块明文.任何代码或HTML标记,例如/ n或<br /> ...更不用说h1,h2等......对文本在页面上的显示方式没有明显影响.

我正在使用部署在GAE上的WTForms运行Flask.我怎样才能解决这个问题?有没有办法在新的博客文章条目的表单字段中实现WYSGIWYG编辑器(如TinyMCE)?

我想要看起来像......一样简单优雅

http://www.quietwrite.com

要么

http://lucumr.pocoo.org/

...或者至少类似于Stackoverflow自己的编辑器.

格式化在发布时在上述所有帖子中呈现(而不是通过编辑器的grody overblown工具栏).

我不确定在我的帖子中禁止HTML标签的呈现是否与WTForms中的类的自定义有关,或者必须在GAE的数据存储中专门处理的内容,或者我需要在Flask中修复的内容(例如,模型为帖子).关于我 - 作为一个相对初级的开发者 - 可以将格式化到这些博客文章中的任何明确解决方案都能获得丰厚的回报.来自以下应用的具体代码......

注意:还有一个Flask-Markdown扩展,但我同样不确定如何集成它以实现我想要的效果.


详细问题,加上代码库中的代码片段

我在Google App Engine上运行Flask(当然还有Jinja模板/ Werkzeug路由),并且对于如何将WYSIWYG编辑器集成到我专门用于博客帖子的页面感到困惑...

我假设,如果合并TinyMCE,JavaScript的调用将放在模板的标题中......就像这样:

<script type="text/javascript" src="/static/js/tiny_mce/tiny_mce.js">
Run Code Online (Sandbox Code Playgroud)



但是,那么 - 因为,本身,模板或渲染页面本身没有 ,它不仅仅是 --TinyMCE的安装文档 - 也是在模板中添加以下代码块的问题......

<textarea cols="80" rows="10" id="articleContent" name="articleContent">
  &lt;h1&gt;Article Title&lt;/h1&gt;
  &lt;p&gt;Here's some sample text&lt;/p&gt;
</textarea>

<script type="text/javascript">
tinyMCE.init({
  theme : "advanced",
  theme_advanced_toolbar_location : "top",
  theme_advanced_toolbar_align : "left",
  mode : "exact",
  elements : "articleContent"
});
</script>
Run Code Online (Sandbox Code Playgroud)



目前,在模板文件的标签内......

<label for="title">{{ form.title.label }}</label>

{{ form.title|safe }}

{% …
Run Code Online (Sandbox Code Playgroud)

tinymce werkzeug jinja2 flask wtforms

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

用于S3 Post的Python生成签名

我想我已经阅读了几乎所有关于签名的base-64编码的内容,用于浏览器内,基于表单的帖子到S3:旧文档和新文档.例如:

http://doc.s3.amazonaws.com/proposals/post.html

甚至发现了这个:

http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html

我没有使用上面或亚马逊的新策略生成器,也没有使用Boto,我试图草拟一个更简单的.py脚本,它从明文文件(policy.txt)中提取策略JSON,然后生成必要的基础 - 64位编码签名,帮助我起草HTML表单.

签名本身(依赖于编码策略)未被正确编码...可能是由于某种utf-8与ascii或\n(换行)问题?

我正在使用的脚本如下,策略和AWS Secret Key private_key来自我正在使用的AWS测试用例,以查看此脚本是否有效.正确编码的签名 - 由亚马逊引用 - 包含在下面的脚本中以供参考.

谁能告诉我为什么下面计算的签名与亚马逊提供的参考签名不符?

换一种说法:

为什么这是正确编码的:

policy_encoded = base64.b64encode(policy)
Run Code Online (Sandbox Code Playgroud)

但这个不是:

signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())
Run Code Online (Sandbox Code Playgroud)

PYTHON签名计算器......

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import base64, hmac, sha
from sys import argv

script, policy = argv

private_key = 'uV3F3YluFJax1cknvbcGwgjvx4QpvB+leU8dUj2o'
input = open("..Desktop/policy.txt", "rb")
policy = input.read()
policy_encoded = base64.b64encode(policy)
signature = base64.b64encode(hmac.new(private_key, policy_encoded, sha).digest())
print "Your policy base-64 encoded is %s." % (policy_encoded)
print "Your signature base-64 …
Run Code Online (Sandbox Code Playgroud)

python post base64 amazon-s3 amazon-web-services

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

Python list_of_tuples:每个元组的第二个val,仅当元组的第一个val ==

我有一个"标记"元组列表...每个元组都是(tag_id,value)...就像这样:

my_list = [(tag_A, 100), (tag_A, 200), (tag_A, 300), (tag_A, 400), (tag_B, 400), (tag_B, 600)]
Run Code Online (Sandbox Code Playgroud)

我想用相同的标签将每个元组的值相加...这样:

sum_of_all_values_with_tag_A() = 1000

sum_of_all_values_with_tag_B() = 1000
Run Code Online (Sandbox Code Playgroud)

我无法想出一个简单的Pythonic方法.

sum(set(value for tag_id, value in my_list)) 
Run Code Online (Sandbox Code Playgroud)

...返回所有值的总和.

我想我可以使用for或while循环来包装它,这样只有那个带有我想要求和的标签的元组被这个表达式触及......?我需要将与两个标签相关联的值相加...得到两个不同的总数,如上所述区分.但是对于这样的事情,不能完全理解一种优雅的语法.

这发生在预先存在的功能内部.没有嵌套功能就可以做到这一点.

任何建议表示赞赏!

python tuples list set

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