一 表单类
from django import forms
from .models import Course, Lesson
# 课程标题表单类
class CreateCourseForm(forms.ModelForm):
class Meta:
model = Course
fields = ("title", "overview")
# 课程内容表单类
class CreateLessonForm(forms.ModelForm):
class Meta:
model = Lesson
fields = ['course', 'title', 'video', 'description', 'attach']
def __init__(self, user, *args, **kwargs):
super(CreateLessonForm, self).__init__(*args, **kwargs)
# 通过user这个参数,筛选出当前用户的course值
self.fields['course'].queryset = Course.objects.filter(user=user)
二 编写视图类
class CreateLessonView(LoginRequiredMixin, View):
model = Lesson
login_url = "/account/login/"
# 重写view的get方法
def get(self, request , *args, **kwargs):
# 创建表单类实例
form = CreateLessonForm(user=self.request.user)
return render(request, "course/manage/create_lesson.html", {"form":form})
# 重写view的post方法,响应用户提交的表单
def post(self, request, *args, **kwargs):
# 因为提交的表单中有上传的文件,所以必须传入request.FILES
form = CreateLessonForm(self.request.user, request.POST, request.FILES)
if form.is_valid():
new_lesson = form.save(commit=False)
new_lesson.user = self.request.user
new_lesson.save()
return redirect("course:manage_course")
三 编写前端模板
{% extends "article/base.html" %}
{% block title %}create lesson{% endblock %}
{% block content %}
<div style="margin-left:200px;margin-top:10px;">
<form enctype="multipart/form-data" action="." method="post" class="form-horizontal">{% csrf_token %}
<div style="margin-top: 10px;">
<div class="col-md-2 text-left"><span>内容标题:</span></div>
<div class="col-md-10 text-left">{{form.title}}</div>
</div>
<div style="margin-top: 20px;">
<div class="col-md-2 text-left"><span>所属课程:</span></div>
<div class="col-md-10 text-left">{{form.course}}</div>
</div>
<div style="margin-top: 20px;">
<div class="col-md-2 text-left"><span>上传视频:</span></div>
<div class="col-md-10 text-left">{{form.video}}</div>
</div>
<div style="margin-top: 20px;">
<div class="col-md-2 text-left"><span>视频描述:</span></div>
<div class="col-md-10 text-left">{{form.description}}</div>
</div>
<div style="margin-top: 20px;">
<div class="col-md-2 text-left"><span>本课附件:</span></div>
<div class="col-md-10 text-left">{{form.attach}}</div>
</div>
<div style="margin-top: 20px;" class="text-center">
<input type="submit" value="Create Lesson">
</div>
</form>
</div>
{% endblock %}
四 编写URL
from django.conf.urls import url
from django.views.generic import TemplateView
from .views import AboutView, CourseListView, ManageCourseListView, CreateCourseView, DeleteCourseView, CreateLessonView, ListLessonsView, DetailLessonView
from .views import StudentListLessonView
urlpatterns = [
url(r'about/$', AboutView.as_view(), name="about"),
url(r'course-list/$', CourseListView.as_view(), name="course_list"),
url(r'manage-course/$', ManageCourseListView.as_view(), name="manage_course"),
url(r'create-course/$', CreateCourseView.as_view(), name="create_course"),
# 默认情况DeleteView类接收以pk或者slug作为参数传入的值,并且通过GET方式访问一个删除的
# 确认页面,然后以POST方式提交删除表单,才能完成删除
url(r'delete-course/(?P<pk>\d+)/$', DeleteCourseView.as_view(), name="delete_course"),
# 创建课程内容
url(r'create-lesson/$', CreateLessonView.as_view(), name="create_lesson"),
]
五 编写前端入口
<div class="bg-info">
<div class="text-center" style="margin-top: 5px;">
<p><h4>文章管理</h4></p>
<p><a href="{% url 'article:article_column'%}">栏目管理</a></p>
<p><a href="{% url 'article:article_post'%}">发布文章</a></p>
<p><a href="{% url 'article:article_list' %}">文章列表</a></p>
<p><a href="{% url 'article:article_tag' %}">文章标签</a></p>
</div>
<hr>
<div class="text-center" style="margin-top: 5px;">
<p><h4>图片管理</h4></p>
<p><a href="{% url 'image:list_images' %}">图片管理</a></p>
</div>
<hr>
<div class="text-center" style="margin-top: 5px;">
<p><h4>课程管理</h4></p>
<p><a href="{% url 'course:manage_course' %}">课程管理</a></p>
<p><a href="{% url 'course:create_lesson' %}">内容发布</a></p>
</div>
</div>
六 测试
七 数据库生成情况