12、视图,13、模板基本使用
在firstapp/models.py文件里面添加一张表(class)
1、在settings.py里面修改数据库名,数据库密码
2、删除迁移文件0001_initial.py
3、在数据库中创建对应第一步的数据库
4、执行生成迁移文件python manage.py makemigrations
5、执行迁移python manage.py migrate
6、进入sunck数据库(这个自己定义),show tables;可以看到数据库多了一张表
7、如果firstapp/models.py某张表想重新弄或者修改字段或者增加字段,尽量全删,删彻底,删除迁移文件0001_initial.py,删除数据库,重新来
6、启动服务python manage.py runserver
7、浏览器测试一下
8、创造管理员python manage.py createsuperuser
12、视图的基本使用:
1、概述
在django中,视图对web请求进行回应
视图就是python的函数,在views.py文件中定义
2、定义视图
from django.http import HttpRespones
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
3、配置url
(1)修改project目录下的urls.py文件
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('firstapp/', include('firstapp.urls')),
path('admin/', admin.site.urls),
]
(2)在firstapp应用目录下创urls.py文件
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
现在您已经将索引视图连接到URLconf中。验证它是否使用以下命令:在project目录下输入:python manage.py runserver
在浏览器中转到http://localhost:8000/firstapp/,您将看到文本“Hello, world. You’re at the polls index.”。这是您在“索引”视图中定义的。
想要在http://localhost:8000/firstapp/输入数字,比如2
http://localhost:8000/firstapp/2/
1、定义视图
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
#这是新添加的代码
def detail(request,num):
return HttpResponse("detail-%s"%num)
2、 (1)project目录下的urls.py文件不需要重新配置
(2)在firstapp应用目录下编辑urls.py文件
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:num>/', views.detail, name='detail'),#这是新添加的代码
]
在网址上http://localhost:8000/firstapp/2 得到如下图
想要在http://localhost:8000/firstapp/输入数字/再输入数字
例如http://localhost:8000/firstapp/100/2
1、定义视图
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
#下面函数需要在上面一个数字的基础上,再添加一个数字num2
def detail(request,num,num2):
return HttpResponse("detail-%s-%s"%(num,num2))
2、 (1)project目录下的urls.py文件不需要重新配置
(2)在firstapp应用目录下编辑urls.py文件
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:num>/<int:num2>', views.detail, name='detail'),#在一个数字的基础上再添一个,用斜杠隔开,注意第一对单引号里面是路径
]
13、模板的基本使用
1、概述
模板是HTML页面,可以根据视图中传递过来的数据进行填充
2、创建模板目录
创建templates目录,在目录下创建对应项目的模板目录(project/templates/firstapp)
【在project目录下创建templates文件(模板),在templates目录下,创建一个firstapp文件,对应firstapp应用视图,可以有多个应用视图,】
D:programpython3Django_learningproject>tree . /F
3、配置模板路径
修改settings.py文件TEMPLATES
BASE_DIR就是project目录,D:programpython3Django_learningproject
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#project目录#D:programpython3Django_learningproject
settings.py文件下TEMPLATES中
'DIRS': [os.path.join(BASE_DIR,'templates')],#模板的目录就有了
4、定义grades.html和students.html模板(在templates/firstapp文件下)
模板语法 ------
1、{{可以是输出值,可以是变量,也可以是 对象.属性}}—想把值显示在页面上,用的是python代码
2、{%执行代码段%}
第一部分
http://localhost:8000/firstapp/
(1)写index.html模板
project/templates/firstapp/index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<hody>
<h1>sunck is good man</h1>#这是在网页上显示的东西
</hody>
</html>
(2)定义视图
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
#return HttpResponse("Hello, world. You're at the polls index.")
return render(request,'firstapp/index.html')
(3)配置urls.py(firstapp文件下)
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
(4)出现如下图
一般情况下,一个URL,我们是这样写的:
urlpatterns = [
path(正则表达式, views视图函数,参数,别名),
]
参数说明:
1、一个正则表达式字符串
2、一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
3、可选的要传递给视图函数的默认参数(字典形式)
4、一个可选的name参数(别名)
第二部分
1、在(模板)templates/firstapp文件下添加保存grades.html和students.html
- 写grades.html和students.html模板
- 定义视图
- 配置url
grades.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生信息</title>
</head>
<hody>
<h1>学生信息列表</h1>
<ul>
{%for student in students%}
<li>
{{student.sname}}--{{student.scontend}}--{{student.sgrade}}
</li>
{%endfor%}
</ul>
</hody>
</html>
students.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>班级信息</title>
</head>
<hody>
<h1>班级信息列表</h1>
<ul>
<!--[计算机一班,计算机二班,财务管理,市场营销]-->
{%for grade in grades%}
<li>
<a href="{{grade.id}}">{{grade.gname}}</a>
</li>
{%endfor%}
</ul>
</hody>
</html>
2、在project/urls.py文件下添加下面代码
from django.contrib import admin
from django.urls import include, path,re_path
urlpatterns = [
path('firstapp/', include('firstapp.urls')),
path('admin/', admin.site.urls),
]
3、在firstapp/views.py文件下添加下面代码
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from . models import Grades
def grades(request):
#去模板里取数据
gradesList =Grades.objects.all()
#将数据传递给模板,模板再渲染页面,将渲染好的页面,返回给浏览器
return render(request,'firstapp/grades.html',{"grades":gradesList})
from .models import Students
def students(request):
studentsList=Students.stuObj2.all()
return render(request,'firstapp/students.html',{"students":studentsList})
4、在firstapp/urls.py文件下添加下面代码
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('grades/',views.grades),
path('students/',views.students),
]
5、输入网址http://localhost:8000/firstapp/students/
6、输入网址http://localhost:8000/firstapp/grades/
第三部分
想要看班级里面有哪些学生
1、定义视图
from .models import Students,Grades
def gradesStudents(request,num):
#获得对应的班级对象
grade=Grades.objects.get(pk=num)#取出班级序号为num的班级
#获得班级下的所有学生列表
studentsList=grade.students_set.all()
return render(request,'firstapp/students.html',{"students":studentsList})
2、配置firstapp/urls.py文件
path('grades/<int:num>',views.gradesStudents),#注意最后面的逗号
3、输入网址http://localhost:8000/firstapp/grades/1
4、输入网址http://localhost:8000/firstapp/grades/2
5、输入网址http://localhost:8000/firstapp/grades/3
6、输入网址http://localhost:8000/firstapp/grades/4
7、或者输入网址http://localhost:8000/firstapp/grades/
然后直接点击想要查询的班级学生,结果会和上面的3、4、5、6结果一样