Flask方法视图:模板如何访问PUT和Delete方法

时间:2014-09-17 11:43:59

标签: python flask

我有以下列表和详细信息视图,我可以访问" GET"和" POST"通过访问url规则。注意:通过GET和POST请求可以轻松访问GET和POST。

但问题是当我想从模板访问PUT和DELETE方法时,Flask文档中没有任何例子可以帮助您这样做。

class ListView(MethodView):

  def get_context(self):
    form = CourseForm(request.form)
    courses = Course.query.order_by('timestamp desc').all()
    if courses is None:
      abort(404)
    context = {
      "courses" : courses,
      "form" : form
    }
    return context

  def get(self):
    context = self.get_context()
    return render_template('courses/list.html', **context)

  def post(self):
    context = self.get_context()
    form = context.get('form')

    if form.validate():
      course = Course(title=form.title.data, coursetype=form.coursetype.data)
      db.session.add(course)
      db.session.commit()
      return redirect(url_for('courses.list'))

    return render_template('courses/list.html', **context)

对于Show / Get,Update / PUT和DELETE方法,我做了以下操作,但如果我使用' get' Show I的详细信息视图中的方法将无法将其用于PUT:

class DetailView(MethodView):

  def get_context(self, course_id):
    form = CourseForm(request.form)
    course = Course.query.filter_by(id=course_id).first()
    if course is None:
      abort(404)
    context = {
      "course": course,
      "form": form
    }
    return context

  def get(self, course_id):
    context = self.get_context(course_id)
    return render_template('courses/detail.html', **context)


  def post(self, course_id):
    context = self.get_context(course_id)

    return render_template('courses/detail.html', **context)

  def delete(self, course_id):
    context = self.get_context(course_id)

我再次实现以下代码以获得PUT的功能如下:

class EditView(MethodView):
  def get_context(self, course_id):
    form = CourseForm(request.form)
    course = Course.query.filter_by(id=course_id).first()
    if course is None:
      abort(404)
    context = {
      "course": course,
      "form": form
    }
    return context

  def get(self, course_id):
    context = self.get_context(course_id)
    form = context.get('form')
    course = context.get('course')

    form.title.data = course.title
    form.coursetype.data = course.coursetype

    return render_template('courses/edit.html', **context)

  def post(self, course_id):
    context = self.get_context(course_id)
    form = context.get('form')
    course = context.get('course')

    if form.validate():
      course.title=form.title.data
      course.coursetype=form.coursetype.data
      db.session.add(course)
      db.session.commit()
      return redirect(url_for('courses.detail', course_id=course_id))

    return render_template('courses/detail.html', )

我想在单个类中实现EditView和DetailView的功能,因为它们都使用course_id。并建议我解决DELETE。

以下是网址规则:

courses.add_url_rule('/', view_func=ListView.as_view('list'))
courses.add_url_rule('/<int:course_id>/', view_func=DetailView.as_view('detail'))
courses.add_url_rule('/edit/<int:course_id>/', view_func=EditView.as_view('edit'))

注意:我想从模板访问这些功能。

先谢谢。

0 个答案:

没有答案