如何预约并将其保存到数据库Flask?

时间:2017-04-17 16:45:11

标签: python flask fullcalendar

我正在制作一个小应用程序,客户可以在日历中预约,但我不知道如何在数据库中保存约会,然后按日期显示给他们。

完整修改:

我已经创建了日历,其中包含一些垃圾约会,如下所示:

Click to see a full image.

我想在数据库中保存约会,所以当任何客户端在提交后的任何日期点击时,ajax请求将被发送到我可以处理请求的视图,这里是 view.py

@abonent_panel_route.route('/panel/make/appointment/')
@abonent_panel_route.route('/panel/make/appointment/', methods=['GET', 'POST'])
def get_appo():
    # user = User.query.filter_by(id=current_user.id).first_or_404()

    import json
    getData = str(request.args.getlist('data'))
    data  = json.loads(getData)

    if data :
        print "\n\n\n\n" + str(data['title']) + "\n\n\n\n"
        return jsonify({'success': data})
    else:
        print "\n\n\n\n" + str(len(data)) + "\n\n\n\n"
        return jsonify({'error': 'No data!'})

以下是javascript代码:

$(document).ready(function() {
    var initialLocaleCode = 'ru';
    var d = new Date();
    var strDate = d.getFullYear() + "/" + (d.getMonth()+1) + "/" + d.getDate();

        $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay,listMonth'
        },
        defaultDate: strDate,
        height: 650,
        locale: initialLocaleCode,
        navLinks: true, // can click day/week names to navigate views
        selectable: true,
        selectHelper: true,
        select: function(start, end) {
            var title = prompt('Event Title:');
            var eventData;
            if (title) {
                eventData = {
                    title: title,
                    start: start,
                    end: end
                };
                $('#calendar').fullCalendar('renderEvent', eventData, true); // stick? = true
                $(this).css({'background-color':'red'});
                $.ajax({
                    type: 'POST',
                    url: '{{url_for("panel_abonent.get_appo")}}',
                    data: [eventData]
                })
                .done(function(data){

                    if(data.error){
                        console.log(eventData);
                    }
                    else {
                        console.log(eventData);
                    }

                });
            }
            $('#calendar').fullCalendar('unselect');
        },


        editable: true,
        eventLimit: true,
        events: [
            {
                title: 'All Day Event',
                start: strDate
            },
            {
                title: 'Long Event',
                start: '2017-04-18',
                end: '2017-04-20'
            },
            {
                id: 999,
                title: 'Repeating Event',
                start: '2017-04-20'
            },
            {
                id: 999,
                title: 'Repeating Event',
                start: '2017-04-29'
            },
        ]
    });

    $.each($.fullCalendar.locales, function(localeCode) {
        $('#locale-selector').append(
            $('<option/>')
                .attr('value', localeCode)
                .prop('selected', localeCode == initialLocaleCode)
                .text(localeCode)
        );
    });

    $('#locale-selector').on('change', function() {
        if (this.value) {
            $('#calendar').fullCalendar('option', 'locale', this.value);
        }
    });
});

在控制台内部,我可以看到所选日期的数据列表,如标题,开始和结束时间,这里是:

Object {title: "asfawg", start: r, end: r}
start : r{
    "_ambigTime":true,
    "_ambigZone":true,
    "_d" : "Thu Apr 06 2017 06:00:00 GMT+0600 (+06)",
    "_fullCalendar":true,
    "_i":"2017/4/19",
    "_isAMomentObject":true,
    "_isUTC":true,
    "_isValid":true,
    "_locale":e,
    "_offset":0,
    "_pf":Object,
    "__proto__":Object,
    "title":"asfawg"
}

view.py 中,我已将字典转换为列表,以便从列表中轻松获取数据,因此您有一个键和值,就像您一样# 39;我在上面看到我打印标题打印&#34; \ n \ n \ n \ n&#34; + str(数据[&#39;标题&#39;])+&#34; \ n \ n \ n \ n&#34; 我应该得到标题的值 asfawg < / strong>,但我什么也没得到,请求总是返回无数据。,列表的长度返回 0

拜托,任何人都告诉我,我犯了哪个错误。

1 个答案:

答案 0 :(得分:1)

我解决了这个问题,eventData本身就是一个不是列表的字典。

因此,如果我想在ajax请求中获取开始日期,然后将其发送到我的 view.py ,我会做类似的事情:

#include "mainwindow.h"
#include <QApplication>



int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    w.show();

    return a.exec();
}

我已经改变了一点我的观点,我添加了一个函数,它接受任何json参数并将其作为json字典返回,我使用data: { 'data': title, 'start': eventData['start']['_d'], 'end': eventData['end']['_d'] } 来完成这项工作,这里是函数:

flask_restful

接下来非常简单,只需按照以下顺序逐个获取参数:

def parse_arg_from_requests(arg, **kwargs):

    from flask_restful import reqparse
    parse = reqparse.RequestParser()
    parse.add_argument(arg, **kwargs)
    args = parse.parse_args()
    return args[arg]