我正在寻找一个Java内存中对象缓存API.有什么建议?你过去使用过什么解决方案?
现在,我只是使用地图:
Map cache = new HashMap<String, Object>();
cache.put("key", value);
Run Code Online (Sandbox Code Playgroud)
我需要扩展缓存以包括以下基本功能:
但是,我不需要更复杂的功能,如:
内存缓存:
企业缓存:
我正试图搞清楚Django URL名称空间.但我找不到任何示例或文档.
这是我尝试过的.
urls.py:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^foo/', include('sub_urls', namespace='foo', app_name='foo')),
(r'^bar/', include('sub_urls', namespace='bar', app_name='bar')),
)
Run Code Online (Sandbox Code Playgroud)
sub_urls.py:
from django.conf.urls.defaults import patterns, url
from views import view1
urlpatterns = patterns('views',
url(r'^(?P<view_id>\d+)/$', view1, name='view1')
)
Run Code Online (Sandbox Code Playgroud)
views.py:
from django.shortcuts import render_to_response
def view1(request, view_id):
return render_to_response('view1.html', locals())
Run Code Online (Sandbox Code Playgroud)
在view1.html中,{%url foo:view1 3%}输出/ foo/3,{%url bar:view1 3%}输出/ bar/3.无论我浏览到/ foo/X还是/ bar/X,都是如此.
我想要的是能够浏览到/ foo/X或/ bar/X,并且{%url view1 3%}分别输出/ foo/3或/ bar/3.
我有一个拥有数百万电话号码的数据库,可以免费格式化.即,UI不强制执行任何约束,并且用户正在输入他们想要的任何内容.
我正在寻找的是一个Java API,可以尽最大努力将这些转换为一致的格式.理想情况下,API将采用自由文本值和国家/地区代码并生成有效的国际电话号码或抛出异常.
例如,系统中的电话号码可能类似于以下任何一种:
(555) 478-1123
555-478-1123
555.478.1123
5554781123
Run Code Online (Sandbox Code Playgroud)
鉴于美国的国家,API将为所有这些产生价值"+1(555)478-1123".确切的格式无关紧要,只要它是一致的.
系统中还有数字没有区号,例如"478-1123".在这种情况下,我会期待NoAreaCodeException或类似的东西.
还可能存在诸如"abc"之类的数据,这些数据也应该抛出异常.
当然,我发布的例子有无数种变化,以及国际电话号码的巨大复杂性,它们具有相当复杂的验证规则.这就是为什么我不会考虑自己动手.
有没有人见过这样的API?
我想实现一个装饰器,它为任何方法提供每请求缓存,而不仅仅是视图.这是一个示例用例.
我有一个自定义标记,用于确定长记录列表中的记录是否为"收藏夹".为了检查项目是否是收藏夹,您必须查询数据库.理想情况下,您将执行一个查询以获取所有收藏夹,然后只针对每条记录检查缓存列表.
一种解决方案是在视图中获取所有收藏夹,然后将该集合传递到模板中,然后传递到每个标签调用中.
或者,标记本身可以执行查询本身,但仅在第一次调用时执行.然后可以为后续调用缓存结果.好处是,您可以在任何视图上使用任何模板中的此标记,而无需提醒视图.
在现有的缓存机制中,您可以将结果缓存50毫秒,并假设它与当前请求相关联.我想让这种相关性变得可靠.
这是我目前拥有的标签示例.
@register.filter()
def is_favorite(record, request):
if "get_favorites" in request.POST:
favorites = request.POST["get_favorites"]
else:
favorites = get_favorites(request.user)
post = request.POST.copy()
post["get_favorites"] = favorites
request.POST = post
return record in favorites
Run Code Online (Sandbox Code Playgroud)
有没有办法从Django获取当前请求对象,没有传递它?从标签,我可以传递请求,它将始终存在.但是我想从其他函数中使用这个装饰器.
是否存在每请求缓存的现有实现?
Yahoo的HotJobsResuméResearchREST API的 Java客户端.
我习惯为SOAP API编写Web服务客户端,其中wsimport生成代理存根,并且您已经关闭并运行.但这是一个REST API,对我来说是新的.
我看了一下问题Rest客户端的Java?,但是那里的自动化解决方案假设您同时提供服务器和客户端,在POJO上调用JAXB来生成模式和REST API.
使用Jersey(JAX-RS实现),我已经能够发出手动HTTP请求:
import com.sun.jersey.api.client.*;
...
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);
WebResource webResource = client.resource("https://hj.yahooapis.com/v1/HJAuthTokens");
webResource.accept("application/xml");
// body is a hard-coded string, with replacements for the variable bits
String response = webResource.post(String.class, body);
// parse response into a org.w3c.dom.Document
// interface with Document via XPATH, or write my own …
Run Code Online (Sandbox Code Playgroud) 如果我运行以下命令:
>python manage.py test
Run Code Online (Sandbox Code Playgroud)
Django在我的应用程序中查看tests.py,并在该文件中运行任何doctests或单元测试.它还会查看__ test __字典以运行额外的测试.所以我可以链接来自其他模块的doctests:
#tests.py
from myapp.module1 import _function1, _function2
__test__ = {
"_function1": _function1,
"_function2": _function2
}
Run Code Online (Sandbox Code Playgroud)
如果我想要包含更多doctests,那么在这本字典中是否有比简单列举更简单的方法?理想情况下,我只想让Django在myapp应用程序中查找所有模块中的所有doctests.
是否有某种反射黑客会让我到达我想去的地方?
我遇到Hibernate生成无效SQL的问题.具体来说,混合和匹配隐式和显式连接.这似乎是一个开放的bug.
但是,我不确定为什么这是无效的SQL.我想出了一个生成相同语法异常的小玩具示例.
CREATE TABLE Employee (
employeeID INT,
name VARCHAR(255),
managerEmployeeID INT
)
Run Code Online (Sandbox Code Playgroud)
INSERT INTO Employee (employeeID, name) VALUES (1, 'Gary')
INSERT INTO Employee (employeeID, name, managerEmployeeID) VALUES (2, 'Bob', 1)
Run Code Online (Sandbox Code Playgroud)
这两个查询都有效.我意识到有笛卡尔积; 那是故意的.
明确的加入:
SELECT e1.name,
e2.name,
e1Manager.name
FROM Employee e1
CROSS JOIN Employee e2
INNER JOIN Employee e1Manager
ON e1.managerEmployeeID = e1Manager.employeeID
Run Code Online (Sandbox Code Playgroud)
隐含的JOIN:
SELECT e1.name,
e2.name,
e1Manager.name
FROM Employee e1,
Employee e2,
Employee e1Manager
WHERE e1.managerEmployeeID = e1Manager.employeeID
Run Code Online (Sandbox Code Playgroud)
此查询不适用于MSSQL 2000/2008或MySQL:
SELECT …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个Java API来将ICS(aka iCal)附件转换为格式良好的HTML或纯文本以用于显示目的.理想情况下,它将能够处理:
我正在看iCal4j,它有一个很好的DOM解析器,但没有办法序列化到除了iCal之外的任何东西.
假设您在Windows应用程序之上拥有基于Java的大型遗留ColdFusion.文件访问是通过java.io.File和CFFILE(后者也使用java.io.File)完成的,但不以任何方式集中到单个文件访问库中.此外,假设您在代码中以及数据库中都有硬编码的文件路径.
换句话说,假设文件路径本身不能改变.它们可以是本地或远程Windows文件路径:
有没有办法在Linux上以最少的代码更改运行此应用程序?我正在寻找不涉及遗留代码的创造性解决方案.
一些想法:
我最终试图通过扩展类型验证FileField.但是我甚至无法为此字段获取清除方法以获取POSTed值.
from django.forms.forms import Form
from django.forms.fields import FileField
from django.forms.util import ValidationError
class TestForm(Form):
file = FileField(required=False)
def clean_file(self):
value = self.cleaned_data["file"]
print "clean_file value: %s" % value
return None
@localhost
def test_forms(request):
form = TestForm()
if request.method == "POST":
form = TestForm(request.POST)
if form.is_valid():
print "form is valid"
return render_to_response("test/form.html", RequestContext(request, locals()))
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我得到以下输出:
clean_file value: None
form is valid
Run Code Online (Sandbox Code Playgroud)
换句话说,clean_file方法无法获取文件数据.同样,如果它返回None,则表单仍然有效.
这是我的表单html:
<form enctype="multipart/form-data" method="post" action="#">
<input type="file" id="id_file" name="file">
<input type="submit" value="Save">
</form>
Run Code Online (Sandbox Code Playgroud)
我已经看到了几个片段与解决方案对于这个问题,但我不能让他们与非模型的形式工作.它们都声明了自定义字段类型.当我这样做时,我遇到同样的问题; …
我正在尝试实现raw_input()的替换,它将使用像vim这样的可配置文本编辑器作为用户的接口.
理想的工作流程如下:
如果您熟悉git,这是使用时的体验git commit
,其中编辑器是通过core.editor配置的.其他公用事业crontab -e
也这样做.
最后,我希望my_raw_input()函数也可以使用一个可选字符串w /默认输入内容,然后用户可以编辑它.
-
命令行参数可以从stdin中读取,但是没有要写入stdout的内容:w
.这可能吗?
到目前为止答案很好.我还发现了做同样事情的mecurial代码.我还提出了一个从查看crontab代码开始工作的示例,但与某些响应相比,它看起来像是不必要的复杂.
#!/usr/bin/python
import os
import tempfile
def raw_input_editor(default=None, editor=None):
''' like the built-in raw_input(), except that it uses a visual
text editor for ease of editing. Unline raw_input() it can also
take a default value. '''
editor = editor or get_editor()
with …
Run Code Online (Sandbox Code Playgroud) 我有一个带有自定义表单字段的Django应用程序,其中一些在构造函数中运行缓慢.我最近惊讶地发现,当Django本身启动时,那些构造函数会被调用,甚至在用户在视图中执行需要该表单的操作之前.
为什么他们在服务器启动时被实例化?
例:
urls.py:
from myapp.views import view1
...
url(r'^test$', view1.test),
Run Code Online (Sandbox Code Playgroud)
意见/ view1.py:
class MyForm(ModelForm):
class Meta:
model = MyModel
field1 = MyChoiceField()
class MyChoiceField(ChoiceField):
def __init__(self, choices=(), required=True, widget=None, label=None,
initial=None, help_text=None, *args, **kwargs):
super(ChoiceField, self).__init__(required, widget, label, initial,
help_text, *args, **kwargs)
self.choices = [(m.id, m.name) for m in ReallyLargeTableModel.objects.all()]
Run Code Online (Sandbox Code Playgroud)
如果我在该字段构造函数中设置了一个断点,然后启动Django,它会在我第一次请求任何页面时中断,即使所讨论的视图不需要该表单或字段.stacktrace返回urls.py中的导入行.
这是因为我在urls.py中导入view1,而不是导入view1.test?
编辑:这不是Django特有的,这里是一个测试用例说明行为:
class Something():
def __init__(self):
print "Something __init__() called"
class UsesSomething():
field = Something()
Run Code Online (Sandbox Code Playgroud)
如果在交互式终端中运行它,它将打印"Something init()called".这对我来说是令人惊讶的,因为我实际上没有实例化一个UsesSomething对象.
django ×5
java ×5
python ×2
caching ×1
coldfusion ×1
cross-join ×1
django-cache ×1
django-forms ×1
django-urls ×1
doctest ×1
hibernate ×1
icalendar ×1
jax-rs ×1
jaxb ×1
join ×1
sql ×1
xml ×1