소스 검색

add time/audio is XHR-friendly

boyska 4 년 전
부모
커밋
b0fd381fc7
1개의 변경된 파일28개의 추가작업 그리고 11개의 파일을 삭제
  1. 28 11
      larigira/dbadmin/__init__.py

+ 28 - 11
larigira/dbadmin/__init__.py

@@ -126,15 +126,27 @@ def edit_time(alarmid):
         "add_time_kind.html", form=form, kind=kind, mode="edit", alarmid=alarmid
     )
 
+def is_xhr():
+    return request.headers.get('x-requested-with') is not None
 
 @db.route("/add/time/<kind>", methods=["GET", "POST"])
 def addtime_kind(kind):
     Form, receiver = tuple(forms.get_timeform(kind))
-    form = Form()
-    if request.method == "POST" and form.validate():
-        data = receiver(form)
-        eid = get_model().add_alarm(data)
-        return redirect(url_for("db.edit_event", alarmid=eid))
+    form = Form(csrf_enabled=(not is_xhr()))
+    if request.method == "POST":
+        if form.validate():
+            data = receiver(form)
+            eid = get_model().add_alarm(data)
+            if not is_xhr():
+                return redirect(url_for("db.edit_event", alarmid=eid))
+            else:
+                resp = jsonify(alarmid=eid)
+                resp.status_code = 201
+                return resp
+        elif is_xhr():
+            resp = jsonify(errors=form.errors)
+            resp.status_code = 400
+            return resp
 
     return render_template("add_time_kind.html", form=form, kind=kind, mode="add")
 
@@ -153,12 +165,17 @@ def addaudio():
 @db.route("/add/audio/<kind>", methods=["GET", "POST"])
 def addaudio_kind(kind):
     Form, receiver = tuple(forms.get_audioform(kind))
-    form = Form()
-    if request.method == "POST" and form.validate():
-        data = receiver(form)
-        model = current_app.larigira.controller.monitor.model
-        eid = model.add_action(data)
-        return jsonify(dict(inserted=eid, data=data))
+    form = Form(csrf_enabled=(not is_xhr()))
+    if request.method == "POST":
+        if form.validate():
+            data = receiver(form)
+            model = current_app.larigira.controller.monitor.model
+            eid = model.add_action(data)
+            return jsonify(dict(inserted=eid, data=data))
+        else:
+            resp = jsonify(errors=form.errors)
+            resp.status_code = 400
+            return resp
 
     return render_template(
         "add_audio_kind.html", form=form, kind=kind, suggestions=get_suggestions()