zoukankan      html  css  js  c++  java
  • Django 的工作流程和基本内容

    1.一个基本的Django请求流程

    我们先开始写一个基本的请求。这个请求的获取和处理,是使用 urls.py 和 views.py 处理的。我们使用命令 python manage.py runserver 0.0.0.0:8000 启动服务器,这个操作会去读取项目目录下的 settings.py 文件,里面是这个项目的所有配置信息,里面有一项配置 ROOT_URLCONF , 这个配置的是项目请求路径和处理view的映射器。

    image

    从上我们可以看到,配置位置是 ProjectManagement.urls ,即代表项目下的urls.py 为路径和view的映射器。下面来看一下项目下的 urls.py 文件,如下所示。

    image

    可以看到我们这个py文件定义了一个叫做 urlpatterns 的list,里面陈列了项目中所有的请求路径和处理view的映射url(), 第一部分是正则表达式,正则匹配我们输入的链接地址,第二部分是处理该链接发来的请求的view。其中我们自定义了一个url,是 url(r’^now/’, views.current_datetime()), 这个正则表达式代表所有输入路径以now/开头的请求都会交给 views.current_datetime 处理。其中views.current_datatime 是我们在views.py 中定义一个请求处理函数,代码如下。

    image

    这个处理函数的特点是参数为request,用来接收我们发来的请求数据,我们在这个函数中构造了一个包含当前时间的html代码,然后使用HttpResponse函数分装返回给前台页面,最后我们启动服务,在页面上输入localhost:8000/now 就看到了如下信息。

    image

    看到了我们构造的信息。这样一个基本的请求处理流程就完成了。

    image

    从上面的urls.py中,我们可以看出,django是松耦合。路径和视图的映射与视图的实现都是分开的,也就是说,我们修改了视图,不影响映射关系,修改映射关系,不影响视图

    对于常见的Restful URL,我们应该怎么处理?

    一般使用如下方法

    image

    image

    2. django的模板系统

    通过我们上面在python代码中拼接html代码,是不是有点很不方便。django有模板系统,方便我们分离前后台,实现数据和页面的分离。模板系统主要包括定义模板,定义上下文,匹配模板和上下文。其中我们的模板即可是文件中的html代码,也可以是我们定义的html代码字符串。

    • 定义模板

        使用django.template.Template定义模板

    • 定义上下文

        使用django.template.Context定义上下文

    • 模板渲染

        使用template.render(context)渲染模板

        代码如下:

    image

    这个只是实现了我们的html代码和业务数据的分离,并没解决html代码硬编码的问题。一般来说,html代码一般写在html文件里。所以,继续学习其他配置模板的方式。我们知道在项目中的settings.py是项目配置文件,它也是一个python文件,里面定义了一个变量 TEMPLATES ,这个变量就是用来配置我们在项目中定义的模板文件的目录。我们在项目中创建一个template文件夹,同时修改settings.py 的配置。

    image

    接下来,我们在模板文件夹下创建一个模板html,然后使用django.templates.get_template加载该模板文件,get_template可以使用子目录,这个子目录相对于我们在settings.py中定义的模板目录。代码如下。

    image

    这样就避免了模板文件html的硬编码。学过jdbc的人都知道,这种代码的格式是一样的,属于样式模板文件,每次都这样写,效率不高,所以引入了一条龙服务的django.shortcuts.render_to_response,无需显式创建模板和上下文以及使用HttpResponse,代码如下。

    image 

    模板系统中的模板标签:(做过java web都对这个肯定很熟悉,模板标签和el表达式类似)

    1. {% if name%}{% endif%} {% else%}: 一定要有结束标签,并且有多个条件时,不支持括号

    2.{% for i in list %} {% endfor%}: 一定要有结束标签,不支持break和continue

    3.{% ifequal a b%}{% ifequal a b%} {% ifnotequal a b%}{% ifequal a b%} : 判断a和b是否相等

    4.{# #} : 注释

    5. {{ name | lower }} : 过滤器

    一般来说模板中不能改变python变量的值,同时也不能调用python代码。

  • 相关阅读:
    android dumpsys meminfo 详解
    效率思维模式与Zombie Scrum
    Mac中Run快捷键修改
    airtest+pytest实战教程05—登录智学网app
    对select函数的理解
    Appium定位元素
    Hack The Box——ServMon
    Oracle DG常用视图与运维护常用操作
    Oracle EBS订单的流程(Order->AR)
    财经法规与会计职业道德
  • 原文地址:https://www.cnblogs.com/glsy/p/8625226.html
Copyright © 2011-2022 走看看