视图里一般是函数和类,需要返回响应。

试图分为2种:2. CBV(class base view) FBV(function base view)

from django.views import View

class Addclass(View):

  def get(self,request):

    pass

  def post(self,request):

    pass

url中,也需要改变

url(r'^add_class/$', views.AddClass.as_view()),

2  fbv本身就是一个函数

可以直接用函数装饰器

但是函数装饰器不可以直接用在类的方法上,但Django中提供了menthod_decorator装饰器用于将函数装饰器转换为方法装饰器

from django.views import View
from django.utils.decorators import method_decorator class AddClass(View): @method_decorator(wrapper)
def get(self, request):
return render(request, "add_class.html") def post(self, request):
class_name = request.POST.get("class_name")
models.Classes.objects.create(name=class_name)
return redirect("/class_list/")

3 上传文件

3. 上传文件的注意事项:

1. 如果有上传文件,views.py中应该从request.FILES中取上传的文件对象

2. 如果有上传文件,html文件中的form表单一定要加 enctype="multipart/form-data"

   file_obj = request.FILES.get("touxiang")  # 拿到上传文件对象
file_name = file_obj.name # 拿到文件名
with open(file_name, "wb") as f: # 在本地新建一个同名文件
for line in file_obj.chunks(): # 从上传的文件对象中一点一点读取数据
f.write(line) # 写到新建的文件中

4  request是一个对象,是一个页面被请求时Django就会创建一个包含本次请求原信息的httprequest对象,django会将这个对象自动传递给试图函数,一般默认为用request参数承接这个对象

request常用对象的方法:

  1 path_info        返回用户访问url ,不包括域名,也不包括参数

  2.method     请求中使用http的方法,全大写字符串表示

  3 GET     包含所有http GET 参数的类字典对象

  4 POST   包含所有http POST参数的类字典对象

  5 body    请求体,byte类型 request.POST的数据就是从body里面提取到的

5 httprespones 响应必须是字符串,其他数据类型要其他的django方法来实现

Django封装的一个专门用来返回JSON格式数据的方法

from django.http import JsonResponse

JsonResponse(字典)
JsonResponse(列表,safe=False)

6 接受的一个变量包含多个值的时候,比如select多选框,就用request.POST.getlist("hobby")

7 模板语言:

 模板语言


1. 目前已经学到的模板语言内容
1. {{变量}}
2. {% 逻辑操作 %}
1. for循环
{% for i in list %}
{{ i }}
{% endfor %} forloop.counter
forloop.counter0 forloop.last {% empty %} 2. if判断
{% if 条件 %}
条件成立要做的事儿
{% else %}
条件不成立要做的事儿
{% endif %}
3. 逻辑判断
1. in 判断
2. == 判断

8  模板语言的相关一些变量:

1. 模板语言变量相关
1. 字典的key对应的值
{{ dic.key}}
2. 列表按索引取值
{{ list.1 }}
3. 对象的属性和方法
{{ obj.name }}
{{ obj.dream }} --> 方法不要加括号

9

2. Filters (对变量做一些额外的操作)
1. 内置的filter
2. 自定义的filter 1. 在app下面新建一个Python package,包名必须叫 templatetags
2. 在上面的包中新建一个python文件,里面定义函数,并且注册到django的模板语言
from django import template
# 生成一个用于注册自定义filter方法的实例
register = template.Library() @register.filter(name="sb")
def add_sb(value):
return "{} sb".format(value)
3. 使用自定义的filter方法
{% load py文件名 %}
{{ value|sb }}
3. tags 4. 母版与继承
1. 定义母版 --> 其他很多页面会用到的共用部分 我们可以提取出来放在单独的一个html文件中
2. 在母版中 通过定义不同的 block 等待子页面来替换对应的内容
3. 在子页面中 通过 {% extends 'base.html '%}来继承已经定义好的母版
4. 在子页面中通过 block 来实现自定义页面内容
5. 通常会在母版中定义 子页面专用的 page-css 和 page-js 两个块

最新文章

  1. CMake比较实用的命令小记
  2. Logistic 分类器与 softmax分类器
  3. 小兔的棋盘(hdu2067)
  4. <!DOCTYPE> 的理解
  5. 在opencv3中的机器学习算法练习:对OCR进行分类
  6. 暑假集训(4)第一弹 -----递推(Hdu2039)
  7. BULK INSERT将CSV或TXT文件导入到SQL Server
  8. 关于考虑浏览器兼容性时间的工具demo
  9. debian系统下安装ssh服务
  10. .net基础第一天
  11. 宝塔linux面板.txt
  12. 一个不错的扩展:Ext.ux.container.ButtonSegment
  13. LeetCode算法题-Toeplitz Matrix(Java实现)
  14. Wannafly Union#1
  15. 机器人学 —— 机器人感知(Location)
  16. 快速创建IIS站点并设置权限
  17. 转: Linux mount/unmount命令
  18. Ubuntu 安装asciidoc时默认推荐了巨大的安装包
  19. elasticsearch基础----->elasticsearch环境的搭建
  20. PHP中使用Jpgraph生成统计图

热门文章

  1. 关于android studio中使用class.forname()方法动态获取类实例报NO CLASS FOUND异常的几种处理方法
  2. poj1753-Flip Game 【状态压缩+bfs】
  3. Swing简介
  4. 深入浅出Javascript事件循环机制
  5. 855C Helga Hufflepuff's Cup
  6. 修改tomcat默认的编码方式
  7. <%@ include file=""%>与<jsp:include page=""/>区别(转)
  8. Bulma 源码解析之 .columns 类
  9. 国外物联网平台(2):微软Azure IoT
  10. Cookie seesion 赋值