我有以下列表和详细信息视图,我可以访问" 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'))
注意:我想从模板访问这些功能。
先谢谢。