这更像是一个设计问题,而不是技术问题,但它让我完全难过.
所以,我有一个网页(通过谷歌应用程序引擎托管)列出了一些单独的表格(每个都是一个问题/谜题).单个拼图有许多文本框可供填写,还有一个提交按钮.点击提交后,向服务器(运行python)发出ajax请求,检查给出的答案是否正确.作为回应,页面通过相关文本框添加适当的刻度和十字来更新,以及覆盖整个问题的中等不透明覆盖(以使整个事物具有"灰色"效果).
刷新页面时,这些修改显然会消失.但是,ajax请求会将答案信息保存到数据库中.问题本身是通过使用Jinja2呈现页面来创建的.
因此,所有相关数据都被保存,以便下次用户返回页面时,他过去回答的问题仍然是灰色的,他的答案和勾选/交叉仍然存在.但是,我无法弄清楚最好的方法是什么.我是否使用jinja2循环中的if语句对已完成问题的dom修改进行硬编码(例如:对于每个正在创建的问题,如果它已经被回答,则以不同方式呈现).或者,让页面正常加载,然后对页面上的每个问题/表单执行一个有载XHR会更好吗?
真的我想要做的是,因为每个表单都在Jinja2中呈现,执行xhr以查看它是否在数据库中有答案,如果有,则相应地采取行动.但将jinja2与ajax混合似乎相当混乱,肯定有更好的方法可以解决这个问题吗?
很抱歉这个冗长的问题,希望它至少是可以理解的.
在登录表单中单击facebook登录按钮会正确显示fb登录弹出窗口,但在输入凭据后弹出窗口关闭且没有任何反应.
再次单击该按钮而不重新加载页面确认fb帐户已连接为浏览器控制台打印:
用户已连接时调用FB.login().
但是,在用户数据库中没有出现新条目,用户未被重定向且未登录.因此,问题似乎在于AllAuth如何处理事情.虽然后端的任何地方都没有显示调试信息,但这有点难以理解.
这是allauth设置:
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
DEFAULT_FROM_EMAIL = "[removed for stackoverflow]"
ACCOUNT_EMAIL_REQUIRED = True
SOCIALACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
SOCIALACCOUNT_EMAIL_VERIFICATION = "mandatory"
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = \
{'facebook':
{'METHOD': 'oauth2',
'SCOPE': ['email','public_profile', 'user_friends'],
'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'FIELDS': [
'id',
'email',
'name',
'first_name',
'last_name',
'verified',
'locale',
'timezone',
'link',
'updated_time'],
'EXCHANGE_TOKEN': True,
'VERIFIED_EMAIL': False,
'VERSION': 'v2.4'}}
Run Code Online (Sandbox Code Playgroud)
这是登录页面上的js:
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '[removed for stackoverflow]',
xfbml : true,
version …Run Code Online (Sandbox Code Playgroud) DoSomething(Car car);
DoSomething(Bike bike);
public class Car : Vehicle {}
public class Bike : Vehicle {}
public abstract class Vehicle {}
void run(Vehicle vehicle) {
DoSomething(vehicle);
}
Run Code Online (Sandbox Code Playgroud)
这感觉就像一个简单的问题,但我遇到了问题.DoSomething(车辆车辆)不存在,因此即使车辆"保证"为汽车或自行车,DoSomething(车辆)也会抛出错误.我怎样才能说服编译器"车辆"是自行车还是汽车,以便可以运行DoSomething?
当然,我可以采用另一种方法
DoSomething(Vehicle vehicle)
{
if(vehicle is Car) ... etc
}
Run Code Online (Sandbox Code Playgroud)
但肯定有更清洁的方法吗?
编辑/ CLARITY
将此代码放在管理器类中而不是在Vehicle类中存在DoSomething()的动机是每个Vehicle需要访问程序的不同部分.例如:
DoSomething(Car car) {
motorwayInfo.CheckMotorwayStatus();
}
DoSomething(Bike bike) {
cycleInfo.CheckCyclePathStatus();
}
Run Code Online (Sandbox Code Playgroud)
不确定这个类比是否真的能够解决我的特定问题,哈哈 - 但基本上我不希望Car有任何对cycleInfo的引用,也不希望Bikes对motorWayInfo有任何引用.但是,将DoSomething放入车辆基本上意味着它的参数需要是:
DoSomething(CycleInfo cycleInfo, MotorwayInfo motorwayInfo)
Run Code Online (Sandbox Code Playgroud)
要么
DoSomething(InfoManager infoManager)
Run Code Online (Sandbox Code Playgroud)
这些都不是完全理想的,因为我知道每个子类型只会使用特定的信息对象.我错了吗?
如果对象的某个组件具有基类BaseClass<T>,则调用GetComponent<BaseClass<T>>()不会返回该组件。泛型参数似乎将其抛弃了,因为在BaseClass不使用泛型的情况下,GetComponent<BaseClass>()调用时将正确地将派生类作为组件返回。
有谁知道可靠的解决方法?在此类中使用泛型arg有点重要,因此显然我不愿为了适应这种情况而重写程序的类结构。
这是有关课程的粗略草图
//the base class that I'd like to be able to fetch the subclasses of using GetComponent
public abstract class BaseUIClass<T> : MonoBehaviour where T :BaseEntity {}
//EntityType1&2 are derived from BaseEntity
public class DerivedUIClass1 : BaseUIClass<EntityType1> {}
public class DerivedUIClass2 : BaseUIClass<EntityType2> {}
Run Code Online (Sandbox Code Playgroud)
BaseUIClass具有此方法:
public virtual void Setup(T entity) {}
Run Code Online (Sandbox Code Playgroud)
将组件添加到GO后不久需要调用该方法。
编辑:
实际上,我想要做的是以下操作,而无需进行硬编码(我想实际使用我定义的通用args)
if(uiClassObj is typeof(DerivedUIClass1) go.GetComponent<BaseUIClass<EntityType1>>();
else if(uiClassObj is typeof(DerivedUIClass2) go.GetComponent<BaseUIClass<EntityType2>>();
//etc
Run Code Online (Sandbox Code Playgroud)
但是考虑到正在使用类型的组件BaseUIClass<BaseEntity>,并且我感兴趣的两个以上派生类由DerivedUIClass1<EntityType1>和定义DerivedUIClass2<EntityType2> …
我正在使用标准的几行代码从http get请求中检索密钥并使用它来从数据存储区获取某些内容,但是我遇到了一个我之前没有遇到过的问题.这只发生在实时(已部署)版本上 - 在开发服务器上运行代码时没有问题.
代码段:
imgId = self.request.args.get("img_id")
imageInfo = db.get(imgId)
Run Code Online (Sandbox Code Playgroud)
一个错误的例子:
BadKeyError: Invalid string key ahFjeWJlcm5hdXRzcHJvamVjdHINCxIFSW1hZ2UY1oYDDA=. Details: Incorrect padding
Run Code Online (Sandbox Code Playgroud)
如果我在db.get之前记录imgId的值,那么它是正确的(没有从调试消息中附加"=").有谁知道这可能导致什么?
我有一个jinja模板,带有通常的样板链接,其中一个是"退出"链接.在呈现页面之前,必须使用Users.create_logout_url()生成此链接的URL.
我想避免生成此URL并将其添加到每个get/post处理程序的render_response中.我已经研究过替代品,但还没有找到一种功能性的方法来解决这个问题.
BaseRequestHandler
这似乎是最干净的方法,但我不确定如何去做.会不会是这样的
self.vars['logout_link'] = users.create_logout_url(self.request.path))
Run Code Online (Sandbox Code Playgroud)
..然后,在所有标准响应处理程序中:
return render_response('template.html', **vars)
Run Code Online (Sandbox Code Playgroud)
?
装饰
这似乎是另一种选择,虽然看起来有点凌乱.我想它可以以相同的方式工作(将logout链接分配给包装函数中的局部变量).
上下文处理?
我正在使用tipfy/jinja,据我所知,这似乎不支持这个.
有什么建议我应该进一步调查吗?
谢谢
get_serving_url当前不支持单独调整图像宽度/高度的大小,而是仅允许使用'size'参数调整正方形大小。
http://code.google.com/p/googleappengine/issues/detail?id=4200
有人可以为此建议有效的解决方法吗?似乎使用images.resize()是可行的方法,但是这是否不需要在blobstore中重新存储转换后的图像以获取get_serving_url的blob_key呢?
希望有一种足够有效的解决方案,以至于不消除使用Blobstore带来的速度优势!
谢谢大家
git lfs migrate 的不当使用——一切以某种方式生成了一个 .gitattributes 文件,其中包含每个已知的文件类型。这基本上破坏了我们的项目,因为每种类型的所有文件现在看起来都像这样:
version https://git-lfs.github.com/spec/v1
oid sha256:f6d1237f5b00a49b32cca659d9764fc16cf012ea887c3007bf9a2120d7e9fef4
size 792
Run Code Online (Sandbox Code Playgroud)
..贯穿整个回购历史。包含目录的文件大小仍然大致相同,这让我希望有一种方法可以恢复它,但我自己无法解决。
由于异常情况,这个 repo 还没有在 github 上 - 如果需要,我们可以恢复到 repo 的副本,但这意味着失去几天的工作。
有没有办法撤销lfs命令?
这就是 .gitattributes 文件最终以某种方式生成的方式:
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.collabignore filter=lfs diff=lfs merge=lfs -text
*.gitignore filter=lfs diff=lfs merge=lfs -text
*.xml filter=lfs diff=lfs merge=lfs …Run Code Online (Sandbox Code Playgroud) python ×4
jinja2 ×2
ajax ×1
blobstore ×1
c# ×1
django ×1
facebook ×1
git ×1
git-lfs ×1
javascript ×1
jquery ×1
overloading ×1
polymorphism ×1
tipfy ×1