当我对请求监视器不执行任何操作时,将显示新请求

时间:2018-04-20 16:17:50

标签: mongodb flask flask-wtforms

我运行书中的代码,并成功地将其部署到我的测试中,#deer; deerdog.me"网站作为门户网站。 有3个模块可供使用:注册,表创建和请求监视。

第一个用户注册模块是好的。

但是当使用新注册的id / pwd进入左上方登录表单时。 (在" home"提示,点击弹出窗口) 你看到第二个table_creating模块似乎很好。按输入的每个随机数在表格上创建。

但是错误就在这里,在这里你不应该触及第3个模块 - 请求,但是一旦你点击"仪表板"在上方的导航栏中。 在新页面中,奇怪的是你可以看到一个新的请求被隐身添加。 (理论上,请求行只能通过" add-request"功能添加,但现在不能添加#34; get-request"功能。

我发现的最大提示是我只提出了&#34;添加请求&#34;在@app.route("/newrequest/<tid>")的路线下,甚至是路线@app.route("/account/createtable"...,它只有&#34; get-request&#34;功能,可以在mongodb db.requests.()中创建请求。 为什么会这样,请帮助我检查和修复。非常感谢。

第二个模块的操作逻辑(使用相同的#34; / account&#34;路径页面创建表格和显示, 激活动作==你输入一个空白的随机数(2,5或66,109)并点击&#34;创建按钮&#34; ,然后你会在同一个&#34; / account&#34;中看到行(包括一个shor url)。页。 第3个模块的操作逻辑(创建请求然后显示在&#39; / dashboard&#39;路由页面。)应该只在这种情况下激活(用户复制/ account路由页面表行中的短URL,然后ctrl + p短URl到一个新的浏览地址,然后在这个新的&#34; @ app.route(&#34; / newrequest /&#34;)下,mongodb中的请求开始合法创建&#34;,现在用户可以跳转第3个模块的操作逻辑。直接创建请求记录而不启动&#34; @ app.route(&#34; / newrequest /&#34;,为什么会发生这种情况?

#dbhelper.py as below
import pymongo
from bson.objectid import ObjectId

DATABASE = "waitercaller"


class DBHelper:

    def __init__(self):
        client = pymongo.MongoClient()
        self.db = client[DATABASE]

    def add_table(self, number, owner):
        new_id = self.db.tables.insert({"number": number, "owner": owner})
        return new_id

    def update_table(self, _id, url):
        self.db.tables.update({"_id": _id}, {"$set": {"url": url}})

    def get_tables(self, owner_id):
        return list(self.db.tables.find({"owner": owner_id}))

    def get_table(self, table_id):
        return self.db.tables.find_one({"_id": ObjectId(table_id)})

    def delete_table(self, table_id):
        self.db.tables.remove({"_id": ObjectId(table_id)})

    def add_request(self, table_id, time):
        table = self.get_table(table_id)
        try:
            self.db.requests.insert({"owner": table['owner'], "table_number": table[
                                    'number'], "table_id": table_id, "time": time})
            return True
        except pymongo.errors.DuplicateKeyError:
            return False

    def get_requests(self, owner_id):
        return list(self.db.requests.find({"owner": owner_id}))

    def delete_request(self, request_id):
        self.db.requests.remove({"_id": ObjectId(request_id)})

主要APP代码,名为waitercaller.py

waitercaller.py
...
@app.route("/")
def home():
    #return "Under construction"
    #return render_template("home.html")
    #registrationform = RegistrationForm()
    return render_template("home.html", loginform=LoginForm(), registrationform=RegistrationForm())

@app.route("/dashboard")
@login_required
def dashboard():
    now = datetime.datetime.now()
    requests = DB.get_requests(current_user.get_id())
    for req in requests:
        deltaseconds = (now - req['time']).seconds
        req['wait_minutes'] = "{}.{}".format((deltaseconds/60), str(deltaseconds % 60).zfill(2))
    return render_template("dashboard.html", resolvesubmitform=ResolveForm(),requests=requests)

@app.route("/dashboard/resolve")
@login_required
def dashboard_resolve():
    form = ResolveForm(request.form)
    request_id = request.args.get("request_id")
    #if form.validate():
    DB.delete_request(request_id)
    return redirect(url_for('dashboard'))
    #return render_template("dashboard.html", resolvesubmitform=ResolveForm(),requests=DB.get_requests(request_id))

@app.route("/account")
@login_required
def account():
    tables = DB.get_tables(current_user.get_id())
    return render_template("account.html", createtableform=CreateTableForm(), tables=tables)

@app.route("/account/createtable", methods=["POST"])
@login_required
def account_createtable():
    form = CreateTableForm(request.form)
    if form.validate():
        tableid = DB.add_table(form.tablenumber.data, current_user.get_id())
        new_url = BH.shorten_url(config.base_url + "newrequest/" + str(tableid))
        DB.update_table(tableid, new_url)
        return redirect(url_for('account'))
    return render_template("account.html", createtableform=form, tables=DB.get_tables(current_user.get_id()))

@app.route("/account/deletetable")
@login_required 
def account_deletetable():
    tableid = request.args.get("tableid")
    DB.delete_table(tableid)
    return redirect(url_for('account'))

@app.route("/newrequest/<tid>")
def new_request(tid):
    DB.add_request(tid, datetime.datetime.now())
    return "Your request has been logged and a waiter will be with you shortly"



if __name__ == '__main__':
    app.run(port=5000, debug=True)

0 个答案:

没有答案