前言:本文是学习网易微专业的《python全栈工程师 - Django快速建站》课程的笔记,欢迎学习交流。同时感谢老师们的精彩传授!
一、课程目标
- 创建课程
- 删除课程
二、详情解读
2.1.判断用户是否登录
上节课的问题:因为是登录用户才可以访问的,未登录用户访问课程列表,会报错:
2.1.1.用户登录
- 安装第三方包:
pip install django-braces
- 修改
views.py
,在类视图中继承
from braces.views import LoginRequiredMixin
实操一:
安装好django-braces
后,修改myproject/course/views.py
from django.shortcuts import render
from django.views.generic import TemplateView, ListView
from .models import Course
from braces.views import LoginRequiredMixin # new
class CourseHome(TemplateView):
template_name = 'course/home.html'
class UserMixin:
def get_queryset(self):
qs = super(UserMixin, self).get_queryset()
return qs.filter(user=self.request.user)
# 多重继承
class UserCourseMixin(UserMixin, LoginRequiredMixin):
model = Course
login_url = '/account/login/' #new
class CourseListView(UserCourseMixin, ListView):
# model = Course
context_object_name = 'courses'
template_name = 'course/course_list.html'
说明:
1).引入LoginRequiredMixin
。
2).UserCourseMixin
添加多重继承,并设置参数登录路由login_url
。
运行结果:(未登录用户访问课程地址时,重定向到登录页面,地址中有next
参数,说明登录后页面会跳转到next
后的路由中)
2.2.发布课程内容
2.2.1.功能
- 填写课程标题
- 填写课程介绍
- 点击按钮发布
2.2.2.开发流程
- 编写表单类:
title、overview
- 类视图
–get
请求,呈现表单
–post
请求,保存内容
实操二:
Step1
:编写表单类。新建文件myproject/course/forms.py
from django import forms
from .models import Course
class CourseCreateForm(forms.ModelForm):
class Meta:
model = Course
fields = ('title', 'overview')
Step2
:编写类视图,修改文件myproject/course/views.py
from django.shortcuts import render
from django.views.generic import TemplateView, ListView
from .models import Course
from braces.views import LoginRequiredMixin # new
# new
from django.views.generic.edit import CreateView
from django.shortcuts import redirect # 实现路由转向
from .forms import CourseCreateForm
class CourseHome(TemplateView):
template_name = 'course/home.html'
class UserMixin:
def get_queryset(self):
qs = super(UserMixin, self).get_queryset()
return qs.filter(user=self.request.user)
class UserCourseMixin(UserMixin, LoginRequiredMixin):
model = Course
login_url = '/account/login/'
class CourseListView(UserCourseMixin, ListView):
# model = Course
context_object_name = 'courses'
template_name = 'course/course_list.html'
# new
class CourseCreateView(UserCourseMixin, CreateView):
fields = ['title', 'overview']
template_name = 'course/course_create.html'