本文是自己学习做的笔记,如有雷同纯属巧合,如有问题请指出,谢谢!
基于环境Ubuntu16.04
python3.6
Django 2.07
三、对于视图(View)的操作
视图学习一:返回响应
视图在views文件中进行编写,其主要作用是和外部进行界面的交互,例如显示数据…………
引入django.http来完成对于django服务器的应答
用HttpRequest(内容1)作出响应1-现在app的目录下建urls.py(用于导入app所需要的url目录)
2-在工程的urls中导入app目录
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'(正则表达式)', include('appName.urls')) # 将app的urls导入到工程文件中
]
然后在app的urls文件中更新views里面定义的各个模块
urlpatterns = [
url(r'^index$', views.index),
url(r'^de', views.detail),
………………
]
3-视图文件的编写
def index(request):
return HttpResponse('<b>Hello World</b>')
视图学习一:定义模板
模板是html页面可以根据视图中传递的数据填充值
如果视图的模板是html文件,或者已有模板,需要导入模板
视图学习二:模板的导入(使用):
这里的模板文件为index.html(已经写好)
1-与manage.py同一目录下创建一个为templates的文件夹里面,里面以各个app为名创建文件夹在各自文件夹下保存自己的模板
2-在settings的TEMPLATES内的'DIRS': [os.path.join(BASE_DIR, 'templates')],把模板地址加入
from django.template import RequestContext, loader
def detail(request):
# 函数名必须在urls文件夹中已经被对应设置,不然在搜索到该索引时不会被触发
template = loader.get_template(模板地址)
# 在模板文件夹下保存的相应appName文件夹下的模板文件
return HttpResponse(template.render())
# 利用template.render()来返回响应,render方法是解析html文件用的
为了简便,目前库已经被整合
from django.shortcuts import render
def detial(request):
# 两个detial实现的功能是一样的, request应该是在框架内部调用时候有用到, 必须有
return render(request, 模板文件)
视图学习三: 获取并传递数据
render方法:def render(request, template_name, context=None, content_type=None, status=None, using=None):
第三个参数就是需要传递的数据 context的类型必须是字典类型, key=参数名, value=参数值
例如:
context = {'param': 'Hello'}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>{{param}}</h1> # 所编写的html文件中用 {{param}}代表需要传入的参数,运行后会被Hello替换
</body>
</html>
如果需要在网页中执行一段python脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{%for book in list%} # list为传入参数
<li>{{book.btitle}}</li>
{%endfor%} # 表示python脚本的结束
</ul>
<h1>{{title}}</h1>
</body>
</html>
详细显示(超链接显示)
首先在html文件中在所需要超链接的前面加上<a href='{{info}}'></a>
{{info}}可以是外部传入的参数组成的字符串
最后会通过127.0.0.1/info的形式出现在url中(指定跳转页面的url)
然后在urls中配置info的正则表达式匹配指定的info对应的视图
urlpatterns = [
url(r'^index$', views.index),
url(r'^de', views.detail),
url(r'^(\d+)$', views.show)
]
在视图view.py中写制定的跳转函数和urls中配置的对应,
def show(request, id):
book=BookInfo.objects.get(pk=id)
herolist = book.heroinfo_set.all()
# 如果有外键用这种方式查询关联对象 模型类1.小写模型类2名_set.
# 模型类1指的是包含外键的类比如book, 模型类2指的是外键指向的类比如hero
content = {'hero': herolist}
return render(request, 'test1/show.html', content)
注意在url中正则()的部分会作为参数回传,这里通过id来接受其正则接收的地址
总结一:Djiango MVT
视图View:接收请求(request必须有),逻辑处理(写在view相应的视图函数中),调用数据(xxx.objects.get().all()来进行查询),输出响应(render)
配置url: 1-在自己的应用中配置urls文件
2-配置一个唯一的正则表达式,url(r"正则表达式", 视图的名称)
模型Model:负责和数据库进行交互,纯面向对象编程,不用sql语句进行增删改查,操作模型对象的列表
1-在models.py中定义模型类:指定属性及类型
2-以确定表的结构,迁移生成表
后台管理: 创建管理员,启动服务器,admin, 注册admin.py(完成模型类的注册)、控制显示效果,把显示效果的类放到register的第二个参数中
模板Template: 定义显示的样式
1-加载(读取文件内容到内存)
2-渲染(填坑)把传过来的数据,填到需要的空里面
3-把生成的模板生成给视图,产生后会传给视图