我想使用AJAX在我的注册页面上添加“检查用户名可用”功能。我对我应该如何实现它的方式几乎没有怀疑。
我应该在哪个事件中注册我的AJAX请求?我们可以发送 当用户关注“用户名”输入字段时出现请求(模糊 事件)或他键入(键盘事件)。这提供了更好的用户 经验?
在服务器端,处理请求的简单方法是 查询我的主要“帐户”数据库。但这可能会导致很多 请求命中我的数据库(如果我们使用keyup进行POST,则更多 事件)。我应该为注册的用户名维护一个单独的模型 只是并使用它来获得更好的结果?
在这种情况下是否可以使用Memcache?使用初始化缓存 每个用户名作为密钥,并在我们注册用户并使用时更新它 随机密钥检查缓存是否实际初始化或通过 直接查询db。
答案 0 :(得分:2)
我建议使用用户名字段的模糊事件,并结合某种内联错误/警告显示。
我还建议维护注册用户名的内存缓存,以减少数据库命中并改善用户体验 - 尽管可能不会通过预热来填充此内容,而是仅在请求时填充。这有时被称为“存储库”模式。
但是,您只能使用USED用户名填充缓存 - 您不应在此处存储“可用”用户名(或者,如果使用,则使用更低的超时)。
在实际执行注册时,您应该始终直接检查DB / Datastore。理想情况下,在某种交易方法中,您不会有多人登记的竞争条件。
但是,所有这些工作都取决于几个方面,包括您的应用程序的繁忙程度以及您正在使用的数据存储技术!
答案 1 :(得分:2)
答案 -
如果您担心两个人同时请求相同的用户名,请将您的create方法放在一个事务中:
@classmethod
@ndb.transactional()
def create_account(cls, name, other_params):
acct = Account.get_by_id(name)
if not acct:
acct = Account(id=name, other param assigns)
acct.put()