我想让一些用户信息可用于我的系统中的两个不同功能视图.py. 但是,我只想访问数据库一次,而不是两次。 有办法吗?你知道吗
以下是输出一些用户信息的函数(userlocs):
def get_user_info(profile_ins):
fav_loc = list()
lat = list()
lon = list()
for loc in UserLoc.objects.filter(profile=profile_ins):
fav_loc.append(loc.name)
lat.append(loc.location.geo_code_lat)
lon.append(loc.location.geo_code_lon)
userlocs = list(zip(fav_loc, lat, lon))
return userlocs
这是用户查看其配置文件时的查看功能。这是我第一次调用get\u user\u info:
def profile(request):
profile_instance = Profile.objects.get(user=request.user)
userlocs = get_user_info(profile_instance)
context = {'locations': userlocs}
return render(request, 'profile.html', context)
现在,我希望userloc列表也可用于以下函数。此函数用于将用户输入与现有的userloc信息进行比较。我知道我可以再次调用get\u user\u info函数,但我认为这是多余的,因为我已经调用过一次了。你知道吗
def add_location_exe(request):
if request.method == 'POST':
ln = UserLocForm(request.POST or None)
if ln.is_valid():
name = ln.cleaned_data.get("name")
## is name in userloc list ##
谢谢你的帮助。你知道吗
您所说的两个视图函数应该访问同一个全局变量。这不是一个好主意,原因不止一个:
userloc
的内容取决于数据库的状态。由于每个请求只调用一个视图,因此数据可能已更改。您不能保证这两个请求甚至由同一个Python进程处理。因此,没有全局变量可以跨请求设置和持久化。
出于这两个原因,真正的全局变量(那些不变的变量;不是数据库记录!)应该保留在设置中。如果要在一个请求-响应周期内限制复杂应用程序中的数据库访问,可以使用^{} 装饰器:
这将为整个循环缓存
foo.get_user_info
的值。你知道吗相关问题 更多 >
编程相关推荐