1.  
  1. 一.需要弄清楚的几个关键点:
    KEY:
    1 Django项目无论多大,只是一个应用程序
    2 地址栏发请求默认是GET请求
    form表单可以发送get请求,也可以发送post请求
    3 浏览器接受的响应体是字符串,由浏览器解释渲染成页面给用户看
    4 form表单的提交按钮事件:
    action对应的服务器发送请求
    ''
    GET /auth/?数据user=yuan&pwd=123 ....
    ......
    ......
    空行
    请求体 # user=yuan&pwd=123
    ''
    5 新的响应会覆盖之前请求的响应页面
  2.  
  3. 二.Django路由
    响应体:render redirect 都基于HttpResponse
    1.HttpResponse
    HttpResponse("字符串") HttpResponse("<a>click</a>")
  4.  
  5. 2.render
    goods_list = ["手机""电脑"]
    dic ={"name":alex,"age":12}
    视图函数中格式
    return render(request,"index.html",{"goods":goods_list,"dic":dic})
    return render(request,local()),local()表示:拿到当前视图函数中的变量
    html文件中: {{goods}}
  6.  
  7. key:
    1.找文件,读文件
    2.渲染数据,解析
    3.把最终渲染的字符串交给HttpResponse返回
  8.  
  9. 3.redirect (重定向)
    访问一个网站跳到另一个网址; 场景:一般在登录成功之后跳转到首页
    1.重定向,涉及到两份请求
  10.  
  11. 2.需要到项目中的配置文件settings文件中,注释掉,或在for表单中加上一句:{% csrf_token %}
    MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware', #setthings中注释掉这句话
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
  12.  
  13. 3.views视图函数中,重定向的格式
    重定向,发生了两次请求。第一次,用户验证成功后,(登录成功才重定向)
    服务器给浏览器回一个状态码(302)和一个响应头locationpath(从定向路径),
    让浏览器在次发请求去访问redirect中的地址path
    return redirect("/index/")
  14.  
  15. 4.redirect
    1.为什么用户登录成功后,不直接用render(request,"index.html"),直接访问首页,而是通过重定向,让客户再次发请求访问首页。
    两者的区别直接用render(request,"index.html"),会丢失数据,就是没有传参数3数据部分;如何重定向去首页,走的是
    render(request,"index.html",{"goods":goods,.....}) 所以两者是有很大的区别的。一般redirect是用在当需要跳转到另一个页面时用。
  16.  
  17. 路由分组:
    无名分组
    \d{4}) urls分组之后,可以获取分组后的值,分组后的值必须传给view函数做参数
    如:url(r"^articles/(\d{2})/(\d{2})",views.get_num) get.get_num(request,12,12)
    有名分组
    (?P<y>\d{4})
    <y> 尖括号里面自命名为y
    urls分组之后,可以获取分组后的值,分组后的值是以键值方式传给视图函数做为关键字参数
    如:url("^articles/(?P<y>\d{4})/(?P<m>\d{2})$",views.get_year_month)#相当于关键字传参 get_year_month(request,y=2002,m=12)
  18.  
  19. 路由分发:
    1.urls中:
    url("app1/",include("app1.urls")),
    url("app2/",include("app2.urls")),
  20.  
  21. 2.app1app2中创建urls
    3.用户访问时,需要地址栏需要先 ip:端口/app1/...
      例子:
        
  1.     from django.urls import path,re_path,include
  2.     from app01 import views
  3.  
  4.     urlpatterns = [
  5.   re_path(r'^admin/', admin.site.urls),
  6.   re_path(r'^blog/', include('blog.urls')),
  7.     ]
  1.  
  2. 模板
    1 渲染变量: {{}}
    1.深度查询
  3.  
  4. 2.过滤器
    {{ val|filter_name:参数 }}
    {{value|default:"nothing"}} //当数据为空时,默认值
    {{value|length}} 返回长度,对字符串和列表起作用
    {{value|filesizeformat}} 格式化文件大小,人类可读
  5.  
  6. date
    var value = datatime.datetime.now()
    {{value|date:"Y-m-d"}}
  7.  
  8. slice 切片
    value ="hello world"
    {{value|slice:"2:-1"}}
    truncatechars
    {{value|truncatechars:9}} //按字节截取
    {{value|truncatewords:9}} //截取单词
  9.  
  10. safe 不需要转义
    value ='<a href="">点击</a>'
    {{value|safe}}
  11.  
  12. 2 渲染标签 {% %}
  13.  
  14. 1.for 标签
    {%for item in li%}
    <p>{{item}}{</p>
    {% endfor%}
  15.  
  16. {% for book in li %}
    <p>{{ forloop.counter}} {{ book.name }} {{forloop.first}}</p> forloop.counter 计数 forloop.first/last判断是否为第一次或最后一次循环
    # <p>{{ forloop.counter0}}=>{{ book.name }}</p> 从0开始计数
    #<p>{{ forloop.revcounter}} ,{{ book.name }}</p> forloop.revcounter 反过来计数
    {% endfor %}
  17.  
  18. <tbody>
    {% for book in books %}
    <tr>
    <td>{{ book.id}}</td>
    <td>{{ book.name }}</td>
    <td>{{ book.author }}</td>
    <td>{{ book.price }}</td>
    </tr>
    {% endfor %}
    </tbody>
  19.  
  20. {% for person in person_list %}
    <p>{{ person.name }}</p>
  21.  
  22. {% empty %}
    <p>sorry,no person here</p>
    {% endfor %}
  23.  
  24. 2. {% if num > 100 %}
    <p>{{num}}</p>
    {% else %}
    <p>{{10}}</p>
    {% endif %}
  25.  
  26. 3. with 给比较长的变量另取别名
  27.  
  28. {% with b_name=book.0.name %}
    <p> {{b_name}}</p>
    {% endwith %}
  29.  
  30. 4. csrf_token 标签
    {% csrf_token %} 当被render() 解析为一个input的标签,里面有一个键值,带着这个键值对去服务器,为了安全
  31.  
  32. 3 自定义过滤器和标签:
    自定义过滤器:最少一个参数,最多两个参数
    1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.
  33.  
  34. INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1.apps.App1Config',
    ]
  35.  
  36. 2、在app中创建templatetags模块(模块名只能是templatetags)
  37.  
  38. 3、创建任意 .py 文件,如:customer_filter_tag.py
    from django import template
    register = template.Library() #register的名字是固定的,不可改变
  39.  
  40. #自定义筛选器
    @register.filter
    def multi_filter(x,y):
    return x*y
  41.  
  42. #自定义标签
    @register.simple_tag
    def multi_tag(x,y,z):
    return x * y * z
  43.  
  44. 4.html 文件中,用时用{% load 自定义标签文件名 %}
    如:
    {% load customer_filter_tag %}
    <p>{{ num|multi_filter:2 }}</p>
    <p>{% multi_tag 4 7 2 %}</p>
    <p>{% multi_tag num 7 4 %}</p>
  45.  
  46. 4 继承
  47.  
  48. 1.母版: base.html文件中:con这个区域的名字,占位个位置,留个子html
    {% block con %}
    <p> 母版钩子中留的内容,子html可以通过 {{block.super}} </p>
    {% endblock %}
  49.  
  50. 2.html
    页面第一行 {% extends "base.html" %}
    内容:
    {% block con %}
    {{ block.super }} #引用母板钩子中留有的内容,表示不全覆盖
    {% endblock %}
  51.  
  52. 反向解析:
    防止硬编码,把东西写死了,
    python 脚本中,重定向的时候,可能会把url写死,
    redirect("/index/") 改为 from django.urls import reverse _url =reverse("index")括号中对应的是别名, return redirect(_url)
    服务端:urls文件中: url(r"^login/$",views.login,name="login"), 别名为login
  53.  
  54. 浏览器端:
    form表单 action = “{% url "别名" %}”
    别名反向解析到最新的url
  1.  
  1.  
  1.  

52 53django的更多相关文章

  1. com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0

    这是由于JDK版本不一致造成的,指的是高版本的JDK编译的class不能放在低版本的JDK上运行. Version 52,表示JDK8编译的class不能运行在JDK7上,所以需要在本地安装JDK8.

  2. 52. 不用+、-、×、÷做加法[add two numbers without arithmetic]

    [本文链接] http://www.cnblogs.com/hellogiser/p/add-two-numbers-without-arithmetic.html [题目] 写一个函数,求两个整数的 ...

  3. NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解多少钱?

    NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解 芯片解密型号: P87C51x2.P87C52x2.P87C54x2.P87C58x2.P87C591  单片机解密 #####[ ...

  4. Java 用LinkdeList实现52张扑克牌

    用LinkdeList实现52张扑克牌(不含大小王)的洗牌功能.提示:花色 ,和数字分别用数组存储. import java.util.LinkedList; import java.util.Ran ...

  5. Unsupported major.minor version 52.0问题的解决

    下载Tomcat9.0,解压后安装运行,结果启动失败,进入logs文件夹看里面的日志文件,提示是Unsupported major.minor version 52.0错误,这是因为Tomcat版本过 ...

  6. CH Round #52 还教室[线段树 方差]

    还教室 CH Round #52 - Thinking Bear #1 (NOIP模拟赛) [引子]还记得 NOIP 2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年过去了,曾经借教 ...

  7. effective OC2.0 52阅读笔记(七 系统框架)

    47 熟悉系统框架 总结:将代码封装为动态库,并提供接口的头文件,就是框架.平时的三方应用都用静态库(因为iOS应用程序不允许在其中包含动态库),并不是真正的框架,然而也经常视为框架.例如:NSLin ...

  8. Android studio 出现 Unsupported major.minor version 52.0

    参考资料:http://blog.csdn.net/fakine/article/details/51241202 最近更新了Android studio 之后,出现了Error:java.lang. ...

  9. Total Commander 8.52 Beta 1

    Total Commander 8.52 Beta 1http://www.ghisler.com/852_b1.php 10.08.15 Release Total Commander 8.52 b ...

随机推荐

  1. Java一元操作符++详解

    废话不多说,直接上代码. package com.coshaho.learn; /** * * OperatorLearn.java Create on 2016-11-13 下午8:38:15 * ...

  2. java后台获取和js拼接展示信息

    java后台获取和js拼接展示信息: html页面代码: <div class="results-bd"> <table id="activityInf ...

  3. Linux基础命令---zcat

    zcat 解压有gzip压缩的文件,将解压结果送到标准输出. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       z ...

  4. chrome谷歌浏览器用这种方式清除缓存比较方便了,必须是调试模式才行

     chrome谷歌浏览器用这种方式清除缓存比较方便了  PS:必须是调试模式才行,可以不是手机模式 ,有些低版本浏览器可能没有这个功能.   ----------------------------- ...

  5. 基于GIT的管理

    常用命令 git init : 初始化仓库git add 文件名 :把文件添加到暂存区git commit -m "操作记录" : 提交到仓库,设置相关操作的记录 git stat ...

  6. [转] Oracle学习之创建数据库(新建实例)

    由于项目需求,在本机中开发,需要新建oracle数据库实例,亲测可以. 出处:http://blog.csdn.NET/luiseradl/article/details/6972217 http:/ ...

  7. Linux学习笔记之Linux Centos关闭防火墙

    # Centos6.x /etc/init.d/iptables stop chkconfig iptables off sed -i 's/SELINUX=enforcing/SELINUX=dis ...

  8. spring mybatis 3.2调用mysql存储过程返回多结果集(完整、亲测、可用)

    最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的. ...

  9. 20145333茹翔 Exp5 利用nmap扫描

    20145333茹翔 Exp5 利用nmap扫描 实验过程 首先使用命令创建一个msf所需的数据库 service postgresql start msfdb start 使用命令msfconsol ...

  10. 20145335郝昊《网络攻防》Exp 4 利用nmap扫描

    20145335郝昊<网络攻防>Exp 4 利用nmap扫描 实验原理 使用msf辅助模块,nmap来扫描发现局域网中的主机ip 实验步骤 首先使用命令创建一个msf所需的数据库 serv ...