先创建这几个文件夹,里面的文件可以自行在我的github下下载。
- 然后建立这两个文件
注意这里的CaptchaField要安装特定的包才会生效,解释器这里无法自动安装 :from captcha.fields import CaptchaField
(pip install django-simple-captcha==0.4.6
)
在APPS里创建多一个urls有什么作用?因为如果只在project里创建一个urls的话,后续创建了很多个APP的话,那么在管理url地址的时候,就会很困难,所以为了更加方便管理各自的app,我们在每一个app中的文件夹中都创建urls文件,在project里的url就要配置namespace,那么这个namespace的作用就是在后续html配置模板语言嵌入的时候,可以通过project的namespace指向APP里的URL地址,如: project: url(’^org/’, include(‘organization.urls’,namespace=‘org’)),
app: url(r’^list/$’, OrgView.as_view(), name=‘org_list’),那么在HTML要调用类方法或者地址的时候,就可以使用类似org:org_list的这种格式进行调用。
首先我们现在organization.views中先创建类去做一个载入和渲染模板的过程:`from django.db.models import Q
from django.http import HttpResponse
from django.shortcuts import render
from django.views.generic.base import View
from organization.forms import UserAskForm
from operation.models import UserFavorite
from courses.models import CourseOrg, Course
from pure_pagination import Paginator, PageNotAnInteger
from organization.models import CityDict, Teacher
class OrgView(View):
#课程机构的列表
def get(self, request):
#获取数据库所有课程机构数据
all_orgs = CourseOrg.objects.all()
#降序获取前三个数据
hot_orgs = all_orgs.order_by(’-click_nums’)[:3]
all_citys = CityDict.objects.all()
# 取出筛选城市
#获取请求后数据的city值,后面的‘’是为了避免获取的值是错误的从而导致系统报错,形成系统崩溃,特地要加上的空值,若获取的值为空值,则知道该值没获取到;
city_id = request.GET.get('city', '')
if city_id:
#这里的filter是过滤器,过滤器的作用跟上面的get作用类似,只是过滤器获取的值是可以多个且类型是字典,如果获取的值是错误的,则自动显示空值,而get只能获取一个值,且类型为列表;
all_orgs = all_orgs.filter(city_id=int(city_id))
# 机构搜索
search_keywords = request.GET.get('keywords', '')
if search_keywords:
#Q作用就是引用 | 这个字符的与意思,__icontains就是把数据库查询到的数据都变为小写;
all_orgs = all_orgs.filter(Q(name__icontains=search_keywords) |
Q(desc__icontains=search_keywords))
# 类别筛选
category = request.GET.get('ct', '')
if category:
all_orgs =