重点
- HttpRequest
- 位置参数和关键字参数
- 查询字符串
- 请求体:表单数据,JSON数据
- 请求头
-
HttpResponse
-
HttpResponse
-
JsonResponse
-
redirect
-
-
类视图
-
类视图的定义和使用
-
类视图装饰器(难点)
-
一、视图介绍和项目准备
1.1 视图介绍
- 视图就是
应用
中views.py
文件中的函数 - 视图的第一个参数必须为
HttpRequest对象
,还可能包含下参数如- 通过正则表达式组获取的位置参数
- 通过正则表达式组获得的关键字参数
- 视图必须返回一个
HttpResponse对象
或子对象
作为响应- 子对象:
JsonResponse
HttpResponseRedirect
- 子对象:
- 视图负责接受Web请求
HttpRequest
,进行逻辑处理,返回Web响应HttpResponse
给请求者- 响应内容可以是
HTML内容
,404错误
,重定向
,json数据
...
- 响应内容可以是
-
视图处理过程如下图:
使用视图时需要进行两步操作,两步操作不分先后
- 配置
URLconf
- 在
应用/views.py
中定义视图
项目准备
-
创建项目+创建应用+安装应用+配置模板路径+本地化+mysql数据库+URLconf+视图
-
mysql数据库使用之前的book2
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 数据库主机
'PORT': 3306, # 数据库端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库用户密码
'NAME': 'book2' # 数据库名字
}
}
- URLconf
-
settings.py
中:指定url配置ROOT_URLCONF = 'bookmanager.urls'
-
项目中
urls.py
:只要不是admin/
就匹配成功,包含到应用中的urls.py
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 把子路由信息添加到总路由中,只要不是‘admin/’就匹配成功,包含到应用中的urls.py path('', include('book.urls')), # 使用include来将子应用book里的全部路由包含进工程路由中 ]
-
-
-
应用中
urls.py
:匹配bookls/
成功就调用views
中的bookList函数,测试项目逻辑from django.urls import path from book.views import bookList urlpatterns = [ # 匹配书籍列表信息的URL,调用对应的bookList视图 path('bookls/', bookList), ]
-
-
视图:测试项目逻辑
from django.http import HttpResponse # Create your views here. # 定义视图:提供书籍列表信息 def bookList(request): return HttpResponse('OK!')
-
在models.py 文件中定义模型类
from django.db import models # Create your models here. from django.db import models # Create your models here. # 准备书籍列表信息的模型类 class BookInfo(models.Model): # 创建字段,字段类型... name = models.CharField(max_length=20, verbose_name='名称') pub_date = models.DateField(verbose_name='发布日期',null=True) readcount = models.IntegerField(default=0, verbose_name='阅读量') commentcount = models.IntegerField(default=0, verbose_name='评论量') is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta: db_table = 'bookinfo' # 指明数据库表名 verbose_name = '图书' # 在admin站点中显示的名称 def __str__(self): """定义每个数据对象的显示信息""" return self.name # 准备人物列表信息的模型类 class PeopleInfo(models.Model): GENDER_CHOICES = ( (0, 'male'), (1, 'female') ) name =