Django视图层基本概念

视图层的主要工作是衔接HTTP请求、Python程序、HTML模板

直接构造HTML页面

对于简单的页面,可以直接在视图函数中构造返回给客户端

from django.http import HttpResponse
import datetime
def current_datetime(request):
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    return HttpResponse(now)

用数据渲染HTML模板文件

模板文件包含丰富的HTML内容,使用渲染模板文件的方法返回月面是最常用的Django视图函数技术

from django.shortcuts import render
from app.models import Moment
def detail(request, moment_id):
    m = Moment.objects.get(id=moment_id)
    return render(request, 'templates/moment.html', {'headline': m.headline, 'user': m.user_name})

返回HTTP错误

HTTP错误可以通过头部的status表达,如:

from django.http import HttpResponse
def my_view(request):
    return HttpResponse(status=404)
也可以直接通过HttpResponse的子类直接返回错误,如:
from django.http import HttpResponseNotFound
def my_view(reequest):
    return HttpResponseNotFound()

常用的特定情况的HttpResponse子类:

  • HttpResponseRedirect:302,用于URL重定向,需要将重定向的目标地址作为参数传给该类
  • HttpResponsePermanentRedirect:301,与302类似,但告诉浏览器这是一个永久重定向
  • HttpResponseNotModified:304,用于指示浏览器用其上次请求时的缓存结果作为页面显示
  • HttpResponseBadRequest:400,请求内容出错
  • HttpResponseForbidden:403,禁止访问错误
  • HttpResponseNotAllowed:405.用不允许的方法访问本页面
  • HttpResponseServerError:500,服务器内部出错

模板语法

模板文件是一个文本文件,主要有HTML、CSS等组成,如:

{% extends "base.html" %}
{% block title %}{{ section.title }}{% endblock %}
{% block content %}

{{ section.title }}

{% for moment in moment_list %}

{{% moment.headline|upper %}}

{% endfor %} {% endblock %}

1、变量替换

用双大括号标记 {{ variable }} 指示进行变量内容替换

2、过滤器

放在变量后用于控制变量显示格式的技术,变量|过滤器,过滤器有很多,可以查看文档了解

3、流程控制

Django提供基本的流程控制,如 {% for %}...{% endfor %}、{% if %}...{% endif %}

4、模板继承

模板继承功能可以使多个页面的公共部分编写在一个模板文件中,父模板主要是定义页面的框架

你可能感兴趣的:(Django视图层基本概念)