Django之视图view
-
视图介绍:
-
视图就是应用中views.py文件中的函数
-
视图的第一个参数必须为HttpRequest对象还可能包含下参数如
- 通过正则表达式组获取的位置参数
- 通过正则表达式组获得的关键字参数
-
视图必须返回一个HttpResponse对象或子对象作为响应
-
子对象: JsonResponse HttpResponseRedirect
-
视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse请求者
-
响应内容可以是HTML内容,404错误,定向,json数据…
-
视图处理过程如下图
使用视图时需要进行两步操作,两步操作不分先后
- 配置URLconf
- 在应用/views.py中定义视图
-
-
项目准备:
1.创建项目+2.创建应用+3.安装应用+4.配置模板路径+5.本地化+6.mysql数据库
+7.URLconf+8.视图+9.定义模型类+10.生成迁移文件+11.同步到数据库中+12.添加测试数据
workon py3_django # 创建项目 django-admin startproject bookmanager # 创建应用,更换解释器 python manager.py startapp book # 安装应用在INSTALLED_APPS中添加 'book.apps.BookConfig' # 配置模板路径:在应用同级目录下,创建templates模板文件夹 # 修改settings中TEMPLATES中的代码 'DIRS': [os.path.join(BASE_DIR,'templates')], # 本地化 # 设置中文 LANGUAGE_CODE = 'zh-Hans' # 亚洲上海时区 TIME_ZONE = 'Asia/Shanghai' # mysql数据库 # 1.修改DATABASES配置信息 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'mysql', # 数据库用户密码 'NAME': 'book' # 数据库名字 } } # 2.在Django的工程同名子目录的__init__.py文件中添加如下语句 import pymysql pymysql.install_as_MySQLdb() # URLconf配置 # 1.项目中匹配urls # 正则 : 路径只要不是admin/就算匹配成功。并包含到应用中的urls.py from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), #正则为:只要不是 admin/ 就算匹配成功 url(r'^',include('book.urls')) ] # 2.应用中创建 urls.py # 正则 : 路径中包含booklist/,就调用视图中对应的bookList函数 from django.conf.urls import url from book.views import bookList urlpatterns = [ # 匹配书籍列表信息的URL,调用对应的bookList视图 url(r'^booklist/$',bookList) ] # 定义视图:测试项目逻辑 from django.http import HttpResponse def testproject(request): return HttpResponse('测试项目逻辑') # 在models.py 文件中定义模型类 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 = models.CharField(max_length=20, verbose_name='名称') gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别') description = models.CharField(max_length=200, null=True, verbose_name='描述信息') book = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书') # 外键 is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta: db_table = 'peopleinfo' verbose_name = '人物信息' def __str__(self): return self.name # 生成迁移文件 python manage.py makemigrations # 同步到数据库中 python manage.py migrate # 添加测试数据 insert into bookinfo(name, pub_date, readcount,commentcount, is_delete) values ('射雕英雄传', '1980-5-1', 12, 34, 0), ('天龙八部', '1986-7-24', 36, 40, 0), ('笑傲江湖', '1995-12-24', 20, 80, 0), ('雪山飞狐', '1987-11-11', 58, 24, 0); insert into peopleinfo(name, gender