构建网页内容

视图函数的return具有多种响应类型:



上述函数主要来自django.http,该模块是实现响应功能的核心。

实际开发中可用此模块实现文件下载功能,在index的urls.py和views.py添加如下代码:

urls.py

path('download.html', views.download)

views.py

def download(request):
file = open('index/somefilename.csv','rb')
response = HttpResponse(file) #推荐用FileResponse
response['Content-Type']='text/csv'
response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
return response

##render()和redirect()
若要使用django.http生成精美html页面,可以在响应内容中编写html代码,如HttpResponse('...')。但这不符合实际开发情况。为此引入render()、render_to_response()、redirect()函数。render_to_response()功能和render()一致,一般很少用。
```python
render(request, template_name, context = None, content_type = None, status = None, using = None)
```
其中request和template_name是必填参数。各个参数说明如下:
- request:浏览器向服务器发送的请求对象,包含用户信息、请求内容和请求方式等。
- template_name:HTML模板文件名,用于生成HTML网页。
- context:对HTML模板的变量赋值,以字典格式表示,默认为空。
- content_type:响应数据的数据格式。
- status:HTTP状态码,默认为200.
- using:设置HTML模板转换生成HTML网页的模板引擎
例子:
urls.py
```python
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
```
views.py
```python
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'index.html', context={'title':'首页'}, status=500)
```
![](https://img2018.cnblogs.com/blog/1758578/201912/1758578-20191225141042743-908433852.png)


redirect()函数用于重定向


##数据可视化
首先在index的models.py中编辑:
```python
from django.db import models

Create your models here.

class Product(models.Model):

id = models.IntegerField(primary_key=True)

name = models.CharField(max_length=50)

type = models.CharField(max_length=20)

在命令行输入以下命令:

根据models.py生成相关的.py文件,用于创建数据表

python manage.py makemigrations

创建数据表

python manage.py migrate

![](https://img2018.cnblogs.com/blog/1758578/201912/1758578-20191225144308024-877265506.png)
执行完后,在数据库中可以看到新建的数据表:
![](https://img2018.cnblogs.com/blog/1758578/201912/1758578-20191225145957010-411232093.png)
<br>
从图中可以看到,Django默认创建多个数据表,其中index_product对应index的models.py所定义的Product类,其余的表都是Django内置功能生成,主要用于Admin站点、用户认证和Session会话等功能。
在index_product中添加数据项
![](https://img2018.cnblogs.com/blog/1758578/201912/1758578-20191225151011435-1048128968.png)
在index.html中编辑左导航栏的代码:
```python
{# <ul id="cate_box" class="lf">#}
{# <li>#}
{# <h3><a href="#">手机</a></h3>#}
{# <p><span>荣耀</span><span>畅玩</span><span>华为</span><span>Mate/P系列</span></p>#}
{# </li>#}
{# <li>#}
{# <h3><a href="#">平板 & 穿戴</a></h3>#}
{# <p><span>平板电脑 </span><span>手环</span><span>手表</span></p>#}
{# </li>#}
{# </ul>#} <ul id="cate_box" class="lf">
{% for type in type_list %}
<li>
<h3><a href="#">{{ type.type }}</a></h3>
<p>
{% for name in name_list %}
{% if name.type == type.type %}
<span>{{ name.name }}</span>
{% endif %}
{% endfor %}
</p>
</li>
{% endfor %}
</ul>

再编辑views.py:

from .models import Product
# Create your views here.
def index(request):
type_list = Product.objects.values('type').distinct()
name_list = Product.objects.values('name','type')
context = {'title':'首页','type_list':type_list,'name_list':name_list}
return render(request, 'index.html', context=context, status=200)

结果:



解释:P55未完待续

获取请求信息

参数request的常用属性:



其中GET、POST、method最为重要。GET和POST用于获取用户的请求参数,method用于获取用户的请求方式。

Django学习笔记(三)视图的更多相关文章

  1. Django学习笔记之视图高级-HTTP请求与响应

    Django限制请求method 常用的请求method GET请求 GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改.比如向服务器获取某篇文章的详情. POST ...

  2. Django学习笔记之视图高级-CSV文件生成

    生成CSV文件 有时候我们做的网站,需要将一些数据,生成有一个CSV文件给浏览器,并且是作为附件的形式下载下来.以下将讲解如何生成CSV文件. 生成小的CSV文件 这里将用一个生成小的CSV文件为例. ...

  3. Django学习笔记之视图高级-类视图

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...

  4. Django学习笔记之视图高级-错误处理

    错误处理 在一些网站开发中.经常会需要捕获一些错误,然后将这些错误返回比较优美的界面,或者是将这个错误的请求做一些日志保存.那么我们本节就来讲讲如何实现. 常见的错误码 404:服务器没有指定的url ...

  5. angular学习笔记(三)-视图绑定数据的两种方式

    绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...

  6. Django学习笔记(三)—— 型号 model

    疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...

  7. Django:学习笔记(9)——视图

    Django:学习笔记(9)——视图 基础视图 基于函数的视图,我们需要在使用条件语句来判断请求类型,并分支处理.但是在基于类的视图中,我们可以在类中定义不同请求类型的方法来处理相对应的请求. 基于函 ...

  8. Django:学习笔记(8)——视图

    Django:学习笔记(8)——视图

  9. Django 学习笔记(三)模板导入

    本章内容是将一个html网页放进模板中,并运行服务器将其展现出来. 平台:windows平台下Liunx子系统 目前的目录: hello ├── manage.py ├── hello │ ├── _ ...

  10. Django 学习笔记(二)

    Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...

随机推荐

  1. 【leetcode】1008. Construct Binary Search Tree from Preorder Traversal

    题目如下: Return the root node of a binary search tree that matches the given preorder traversal. (Recal ...

  2. JS中数据结构之图

    图由边的集合及顶点的集合组成.边是有方向的是有序图(有向图),否则就是无序图(无向图).图中的一系列顶点构成路径,路径中所有的顶点都由边连接.路径的长度用路径中第一个顶点到最后一个顶点之间边的数量表示 ...

  3. linux0.11内核源码——boot和setup部分

    https://blog.csdn.net/KLKFL/article/details/80730131 https://www.cnblogs.com/joey-hua/p/5528228.html ...

  4. paper 164: Siamese网络--相似度量方法

    简介:    Siamese网络是一种相似性度量方法,当类别数多,但每个类别的样本数量少的情况下可用于类别的识别.分类等.传统的用于区分的分类方法是需要确切的知道每个样本属于哪个类,需要针对每个样本有 ...

  5. [CSP-S模拟测试]:marshland(最大费用可行流)

    题目描述 前方有一片沼泽地.方便地,我们用一个$n\times n$的网格图来描述它,每一个格子代表着沼泽地的一小片区域.其中$(1,1)$代表网格图的左上角,$(n,n)$代表网格图的右下角.若用$ ...

  6. 3403. 题解【NOIP2013模拟】数列变换 (Standard IO)

    先看题目: Description 小X 看到堆成山的数列作业十分头疼,希望聪明的你来帮帮他.考虑数列A=[A1,A2,...,An],定义变换f(A,k)=[A2,A3,,,,.Ak,A1,Ak+2 ...

  7. 【刷题笔记】LeetCode 48. Rotate Image

    题意 原地顺时针翻转一个 n*n 的矩阵 图解 下面例子中用 5*5 矩阵做示例,如下图,我们要把该矩阵顺时针翻转90度,并且不能使用另外的矩阵空间来暂存数据,而是原地改变矩阵中数值. 我的想法是这样 ...

  8. WireShark 自带工具 editcap 和 text2pcap 配合完成改包操作

    一.拆包 首先声明这种方法比较复杂而且需要点技术水平,不建议菜鸟尝试(可以使用WireEdit编辑pcap包,不过要联网)其实在熟练这种方法后也可以很快的,但这种方法主要还是方便吧,不用下载其他什么软 ...

  9. maven(二),Linux安装maven3.5.3及配置

    Linux系统,ubuntu-16.04.4,安装maven3.5.3 一.创建文件夹 注意Linux用户,这个如果不是root用户,命令前面需要加:sudo //创建一个目录 mkdir /usr/ ...

  10. JavaScript的日期对象

    1.Date对象用来处理日期和时间. 2.创建Date对象的语法: var myDate = new Date(); 3.Date对象的常用方法: 格式:Date.XX(); getDate() 从 ...