【发布时间】:2014-01-22 23:14:44
【问题描述】:
我目前正在开发一个 Flask 和 Heroku 应用程序,我使用 MongoDB 来保存用户注册信息。我遇到的问题是,当我尝试保存电子邮件时,它给了我错误:
InvalidDocument: key 'email@domain.com' must not contain '.'
我也想知道如何确保每封电子邮件都是唯一的,并且以前不在数据库中,而不必查询数据库。
这是我目前的代码:
import os
import re
from pymongo import MongoClient
from flask import Flask, render_template, request, session, redirect
import jinja2
email_regex = re.compile(r"^[\S]+@[\S]+\.[\S]+$")
password_regex = re.compile(r'^[a-zA-Z]\w{3,14}$')
client = MongoClient("mongodb://<user>:<password>@linus.mongohq.com:11077/users")
db = client.get_default_database()
users = db.users
app = Flask(__name__)
@app.route('/signup', methods=['GET','POST'])
def signup():
if request.method == 'POST':
email = request.form.get('email')
name = request.form.get('name')
password = request.form.get('password')
v_password = request.form.get('v_password')
if email == '' or name == '' or password=='' or v_password =='':
return render_template('signup.html', b_error="Cannot leave any field blank")
elif not(email_regex.match(email)):
return render_template('signup.html', e_error="Please enter valid email!")
elif not(password_regex.match(password)):
return render_template('signup.html', p_error="Please enter valid password")
elif password != v_password:
return render_template('signup.html', m_error="Passwords do not match")
else:
users.insert({name:name, email:email,password:password})
return redirect('/')
return render_template('signup.html')
我是否可以为数据库设置一个模型,以便我可以将电子邮件设置为唯一,使字段不需要/必需,并允许我保存电子邮件?
【问题讨论】:
-
您应该为您的文档使用正确的密钥。
'name'代替名称,'password'代替password。如果它们都有不同的密钥,那么在检索它们时将很难使用它们。在显示用户信息时如何区分用户名和密码? -
我不知道我需要将密钥保留为字符串,这解释了密钥错误。谢谢!
标签: python mongodb flask pymongo