在Django中,在推荐的设置中,UserProfile实例由OneToOneField与其User实例链接.
class UserProfile(models.Model):
user = models.OneToOneField(User)
data = ...
Run Code Online (Sandbox Code Playgroud)
检索用户和配置文件的视图中最有效的方法是什么?我可以执行select_related()内连接查询,以获取一个数据库命中的两个对象吗?或者它总是归结为两个单独的电话?可能,Django的auth中间件甚至在调用视图之前检索用户实例...有人知道吗?
我们使用ElasticSearch搜索数百万个标签.我们的用户应该能够包含布尔运算符(+, - ,"xy",AND,OR,括号).如果没有返回匹配,我们将回退到ES提供的拼写建议并再次搜索.这是我们的查询:
$ curl -XGET 'http://127.0.0.1:9200/my_index/my_type/_search' -d '
{
"query" : {
"query_string" : {
"query" : "some test query +bools -included",
"default_operator" : "AND"
}
},
"suggest" : {
"text" : "some test query +bools -included",
"simple_phrase" : {
"phrase" : {
"field" : "my_tags_field",
"size" : 1
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们希望启用模糊匹配,而不是只提供拼写建议的后备.例如,如果用户搜索"stackoverfolw",则ES应返回"stackoverflow"的匹配项.
附加问题: "纠正"拼写错误的表现更好的方法是什么?就像现在一样,我们必须执行两个后续请求,首先是原始搜索词,然后是by ES建议词.
performance search fuzzy-search elasticsearch search-suggestion
在以下示例中单击"Outside"div容器上方的任何位置时,contentedable span元素将获得焦点.
<div style="margin:30px">
<span contenteditable="true" style="background:#eee">
Hello World
</span>
<div>Outside</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这是一个jsFiddle:http: //jsfiddle.net/AXM4Y/
我希望contenteditable表现得更像真正的文本输入,因此只需单击span元素本身就可以触发其焦点.我该怎么做呢?如何停止捕获容器元素的事件.我已经在父div上使用jQuery尝试了"e.stopPropagation()",但它没有用.
关于这个主题有很多关于 SO 的问题,但没有一个能回答以下问题。使用 Python 请求检查普通 URL 可以很容易地完成,如下所示:
print requests.head('https://www.facebook.com/pixabay').status_code
Run Code Online (Sandbox Code Playgroud)
状态代码 200 表示页面存在。在这种特殊情况下,它是 Facebook 上的一个粉丝页面。
使用 Facebook 上的普通用户个人资料尝试此操作也可以:
print requests.head('https://www.facebook.com/steinberger.simon').status_code
Run Code Online (Sandbox Code Playgroud)
但是,尽管普通浏览器返回 200,但仍有(看似随机的)用户配置文件导致 404 状态代码:
print requests.head('https://www.facebook.com/drcarl').status_code
Run Code Online (Sandbox Code Playgroud)
使用带有 User-Agent 字符串的自定义标头或使用其他方法检查 URL 都会以同样的方式失败:
import requests, urllib, urllib2
url = 'https://www.facebook.com/drcarl'
print requests.head(url).status_code
# using an User-Agent string
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36' }
print requests.head(url, headers=headers).status_code
# using GET instead if HEAD as request method
print requests.get(url, stream=True).status_code
# using urllib
print urllib.urlopen(url).getcode() …
Run Code Online (Sandbox Code Playgroud) 众所周知,当数据库表有很多行时,Django 的管理列表视图会变得相当慢。这是因为 Django 分页器默认使用(慢速)PostgreSQLCOUNT
查询。
因为估计对我们来说很好,而且速度要快得多,例如:
SELECT reltuples FROM pg_class WHERE relname = "my_table_name"
有可用的代码片段来解决此问题,但我不清楚如何实际使用它: https: //djangosnippets.org/snippets/2593/
此外,该代码片段不适用于过滤结果。这是因为上面所示的估计计数在这里不起作用。是否有其他方法可以加快 Django 管理页面中过滤列表视图的速度?
我用 Django 标签发布这个问题,因为我在这个环境中工作,但这实际上更多的是一个通用问题:我想在 Twitter 上显示类似我的时间线的内容,即所有帖子的列表我关注的人按时间顺序排列。
我的典型数据库结构如下所示:
Table Name: Users
Columns:
UserID PK
EmailAddress
Password
TableName: Friends
Columns:
UserID PK FK
FriendID PK FK
TableName: Posts
Columns:
UserID PK FK
Content
Run Code Online (Sandbox Code Playgroud)
如果我想检索给定用户的所有朋友的所有帖子,它看起来像这样(这不应该是有效的 SQL!):
SELECT * FROM Posts WHERE UserID IN (LIST OF "Given user friends' IDs")
Run Code Online (Sandbox Code Playgroud)
这有效 - 没问题!然而,这并不能扩展!假设我们有一个繁忙的网站,给定的用户有 2,000 个朋友,数据库中有大约一千万个帖子。在这种情况下,数据库查询将非常低效且缓慢。
可以使用 PostgreSQL 或 MySQL 等关系数据库来解决这个问题吗?如果没有,Twitter 是如何做到的?
我正在尝试验证用户输入(在 Python 中)并查看是否使用了正确的语言,在本例中为韩语。让我们以韩语单词表示电子邮件地址: \xec\x9d\xb4\xeb\xa9\x94\xec\x9d\xbc \xec\xa3\xbc\xec\x86\x8c
\n\n我可以像这样检查每个字符:
\n\nimport unicodedata as ud\nfor chr in u\'\xec\x9d\xb4\xeb\xa9\x94\xec\x9d\xbc \xec\xa3\xbc\xec\x86\x8c\':\n if \'HANGUL\' in ud.name(chr): print "Yep, that\'s a Korean character."\n
Run Code Online (Sandbox Code Playgroud)\n\n但这似乎效率很低,尤其是对于较长的文本。当然,我可以创建一个包含所有韩语音节块的静态字典,但该字典将包含大约 25,000 个字符,而且检查起来效率很低。另外,我还需要一个针对日语和中文的解决方案,其中可能包含更多字符。
\n\n因此,我想使用涵盖 Hangul 音节块的所有 Unicode 字符的正则表达式模式。但我不知道是否有一个范围或在哪里可以找到它。
\n\n例如,此正则表达式模式涵盖所有基于拉丁语的字符,包括括号和其他常用符号:
\n\nimport re\nLATIN_CHARACTERS = re.compile(ur\'[\\x00-\\x7F\\x80-\\xFF\\u0100-\\u017F\\u0180-\\u024F\\u1E00-\\u1EFF]\')\n
Run Code Online (Sandbox Code Playgroud)\n\n有人可以翻译这个正则表达式以匹配韩文韩文音节块吗?或者您可以向我展示一个表格或参考来自己查找此类范围吗?
\n\n匹配中文和日文的模式也会非常有帮助。或者使用一个正则表达式来一次匹配所有 CJK 字符。我不需要区分日语和韩语。
\n\n这里有一个用于该任务的 Python 库,但它可以与非常大的字典一起使用:https://github.com/EliFinkelshteyn/alphabet- detector \n我无法想象这对于大型文本和大量用户输入来说是有效的。
\n\n谢谢!
\n在我们的代码中,我们将单词"Photo"标记为单数翻译.在代码中的不同位置,我们在复数翻译"Photo"/"Photos"中有这个词,所以:
1 {% trans 'Photo' %}
2 {% trans 'Photos' %}
Run Code Online (Sandbox Code Playgroud)
和
{{ x }} {% blocktrans count counter=x %}Photo{% plural %}Photos{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)
可能的话,我们必须用我们的计数器变量x 内的翻译字符串.但是,我在文档中找不到任何有关此类要求的内容.无论如何,使用我们的代码,我们在PO文件中获得的是:
msgid "Photos"
msgstr ""
msgid "Photo"
msgid_plural "Photos"
msgstr[0] ""
msgstr[1] ""
Run Code Online (Sandbox Code Playgroud)
"Photo"没有msgid,导致"Photo"根本没有被翻译,因为实际的翻译字符串不存在 - 除非在*n*gettext中使用,但不在{%trans'Photo'%}中使用.
我在这里做错了吗?这是一个Django错误吗?
poedit似乎是在 Python 中处理 gettext/po 文件的首选库。该文档显示如何通过迭代消息字符串,保存PO和MO文件,等等。但是,这不是我清楚,怎么能一个编辑的特定项?
比方说,我遍历现有 po 文件中的所有消息,并以带有 textareas 的 HTML 表单显示它们。通过提交表单,我得到 - 例如 - 原始 msgid = "Hello World" 和 via textarea 翻译的 msgstr = "Hallo Welt"
po 文件中的原始部分可能如下所示:
#: .\accounts\forms.py:26 .\accounts\registration\forms.py:48
msgid "Hello World"
msgstr ""
Run Code Online (Sandbox Code Playgroud)
或设置模糊标志:
#: .\accounts\forms.py:26 .\accounts\registration\forms.py:48
#, fuzzy
msgid "Hello World"
msgstr "Hallo"
Run Code Online (Sandbox Code Playgroud)
现在我如何在实际的 po 文件中更新这个特定的翻译?如果此消息被标记为“模糊”,我该如何删除此标志?
任何帮助表示赞赏...
在一个 views.py中,在不同视图中检索相同Django ContentTypes的更有效方法是什么?
a)分别检索每个视图中的类型,如下所示:
from django.contrib.contenttypes.models import ContentType
def my_view1(request):
t1 = ContentType.objects.get_for_model(my_model1)
t2 = ContentType.objects.get_for_model(my_model2)
# ... work with t1 and t2
def my_view2(request):
t1 = ContentType.objects.get_for_model(my_model1)
t2 = ContentType.objects.get_for_model(my_model2)
# ... work with t1 and t2
Run Code Online (Sandbox Code Playgroud)
或者b)在views.py的开头将一次使用的类型作为常量检索,如下所示:
from django.contrib.contenttypes.models import ContentType
T1 = ContentType.objects.get_for_model(my_model1)
T2 = ContentType.objects.get_for_model(my_model2)
def my_view1(request):
# ... work with T1 and T2
def my_view2(request):
# ... work with T1 and T2
Run Code Online (Sandbox Code Playgroud)
ContentTypes数据库表非常小,但Django仍然需要为每个查询建立连接.所以我的猜测是,b)因此更快......?!
django ×5
performance ×4
python ×3
postgresql ×2
translation ×2
admin ×1
alphabet ×1
character ×1
contenttypes ×1
database ×1
events ×1
facebook ×1
focus ×1
fuzzy-search ×1
gettext ×1
html ×1
paginator ×1
pluralize ×1
poedit ×1
regex ×1
search ×1
sql ×1
url ×1
user-profile ×1
validation ×1