Django学习笔记(三)

本文是自己学习做的笔记,如有雷同纯属巧合,如有问题请指出,谢谢!

基于环境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-把生成的模板生成给视图,产生后会传给视图

猜你喜欢

转载自blog.csdn.net/qq_24724109/article/details/81389114