python 学习第二十一天,django知识(三)

一,django的url路由系统总结

  1,url(/index/,函数或者类)

  2,url(/index/(\d+), 函数或者类)

  3,url(/index/(?P<nid>\d+),函数或者类)

  4,url(/index/(?P<nid>\d+),name="root",函数或者类)

    (1) 在views.py文件中通过reverse()反转url

    (2) 在templates中的文件中引用{% url ‘root‘ 1 %}

5,url(/crm/,include(‘app01.urls‘)进行路由分发

   6,默认值url(/index/,{‘web‘:‘root‘},函数或者类)

    在views.py中定义函数 def  func(reqeust,web):return ...来接收web这个参数

7,命名空间

   (1)project.urls.py   

from djanogo.conf.urls import url,include

urlpatterns = [
     url(r‘^a/‘,include(‘app01.urls‘,namespace=‘author-polls‘)),
     url(r‘^b/‘,include(‘app01.urls‘,namespace=‘publisher-polls‘)),
]

   (2)app01.urls.py 

from django。conf.urls import url
from app01 import views

app_name = ‘app01‘
urlpatterns = [
    url(r‘^(?P<pk>\d+/$‘,views.detail,name=‘detail‘)
]

  (3)app01.views.py

def detail(request,pk):
    print(request.resolver_match)
    return HttpResponse(pk)

以上定义带命名空间的url之后,使用name生成URL时候,应该如下:

  v = reverse(‘author-polls:detail‘,kwargs={‘pk‘:11})

  {% url ‘app01:detail‘ pk=12 pp=99 %}

 django 中的路由系统和其它语言的框架有所不同,在django中每个请求的url都要有一条路由映射,这样才能将请求交给对应的view中的函数去处理.其它大部分的WEB框架则是对一类的url请求做一条路由映射,从而使路由系统变得简洁

二,django的路由请求周期知识点

  (1)Form 表单提交,页面肯定刷新,整个流程为,提交form 表单,发送数据到到后台进行处理,然后等待后台处理完成返回数据,并跳转到其它页面

        用户提交请求到url.py文件中的url,url接收到请求后,匹配到后端的视图函数,并将数据发送到后端,后端将请求处理完成之后,或者直接返回字符串给用户(HttpRespose),或者通过render方法中的open函数打开相应的templates中的html文件,将其中的所有的变量进行替换,最终将html文件和数据都已字符串的形式发送给用户,或者用redirect(‘/index/‘)将另外一个请求已字符串的形式发送给用户,用户跳转到其它页面

(2)ajax 提交

  $.ajax({

      url:‘/index/‘;
      data:{‘k‘:‘v‘,‘list‘:[1,2,3,4]};          #或者$(form对象).serilize() 已列表的形式获取整个form中的数据
                type:‘POST‘;                        #向后台提交数据的方式
                dataType:‘JSON‘;                    #以json形式向后台提交数据
                traditional:true;                   #需要向后台发送列表时,必须以加这个参数
                success: function(d) {              #d 为形式参数,可以任意定义            location.reload()               #刷新整个页面            location.href()                 #跳转到其它页面
                }
       })

三,django views知识点

  (1)views中的请求方法

def func(request):
     request.POST
     request.GET
     request.FILES
     request.getlist
     request.method
     request.path_info           #获取当前的请求的url

(2)request.environ 封装了用户所有的请求头部信息

from django.core.handlers.wsgi import WSGIRequest
    request.environ
    request.environ[‘HTTP_USER_AGENT‘]

四,模板的继承

  1,在主模板中定义block {%  block title %}{% endblock %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %} {% endblock %}</title>
    <link rel="stylesheet" href="/static/commons.css" />
    <style>
        .pg-header{
            height: 50px;
            background-color: seashell;
            color: green;
        }
    </style>
    {% block css %} {% endblock %}
</head>
<body>
    <div class="pg-header">小男孩管理</div>
    <div>
        <a>asdf</a>
        <a id="">asdf</a>
        <a>asdf</a>
        <a>asdf</a>
        <a>asdf</a>
    </div>
    <iframe src="/"></iframe>
</body>
</html>

  2,在子模板中引用block,一个html 只能继承一个模板,但可以有多个include

{% extends ‘master.html‘ %}
{% block title %}用户管理{% endblock %}
{% block content %}
    <h1>用户管理</h1>
    <ul>
        {% for i in u %}
            <li>{{ i }}</li>
        {% endfor %}
    </ul>

    {% for i in u %}
        {% include ‘tag.html‘ %}
    {% endfor %}

{% endblock %}

{% block css %}
    <style>
        body{
            background-color: red;
        }
    </style>
{% endblock %}

{% block js %}
    <script></script>
{% endblock %}

3,模板中的自定义simple_tag

 (1)在app 中创建templatetags模板,且目录名称必须为这个名字

  (2)创建任意.py文件,如:xx.py

#!/usr/bin/env python
#coding:utf-8
from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.simple_tag
def my_simple_time(v1,v2,v3):
    return  v1 + v2 + v3

@register.simple_tag
def my_input(id,arg):
    result = "<input type=‘text‘ id=‘%s‘ class=‘%s‘ />" %(id,arg,)
    return mark_safe(result)

(3)在使用自定义simple_tag的html文件中导入之前创建的xx.py文件名

{% load xx %}

(4)使用simple_tag

{% my_simple_time 1 2 3%}
{% my_input ‘id_username‘ ‘hide‘%}

(5)在settings中配置当前的app,不然django无法找到自定义的simple_tag

INSTALLED_APPS = (
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘app01‘,
)

4,自定义simple_tag 中的装饰器用法

  (1)@register.simple_tag 使用方法

{% my_simple_time 1 2 3%}     #my_simple为.py文件中的函数名,可以传多个参数,并且参数之间允许有空格

(2)@register.filter

{{"参数一"|处理函数名:"参数二"}}  #参数二只能有一个,如果需要传递两个参数,可以“参数二,参数三”,然后再后端函数中进行单独处理,                   #应用场景在模板语言中的if判断中,例如{% if "参数一"|处理函数名:"参数二"  %}

五,django Cookie

  1,获取Cookie  

request.COOKIES[‘key‘]
request.get_signed_cookie(key, default=RAISE_ERROR, salt=‘‘, max_age=None)
    参数:
        default: 默认值
           salt: 加密盐
        max_age: 后台控制过期时间

  2,设置Cookie

rep = HttpResponse(...) 或 rep = render(request, ...)

rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt=‘加密盐‘,...)
    参数:
        key,              键
        value=‘‘,         值
        max_age=None,     超时时间
        expires=None,     超时时间(IE requires expires, so set it if hasn‘t been already.)
        path=‘/‘,         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
        domain=None,      Cookie生效的域名
        secure=False,     https传输
        httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

  3,由于Cookie保存在客户端电脑上,所以Javascript或者Jquery 都可以操作Cookie

<script src=‘/static/js/jquery.cookie.js‘></script>
$.cookie("list_pager_num", 30,{ path: ‘/‘ });
时间: 2024-08-11 01:18:06

python 学习第二十一天,django知识(三)的相关文章

Python 学习第二十天 django知识

一,django models 1,django ORM获取后台数据的方式,总共有三种 (1)v1 = models.Business.objects.all()   返回值为QuerySet类型,内部元素都是对象   [obj(id,caption,code),obj(id,caption,code),obj(id,caption,code)] (2)v2 = models.Business.objects.all.values('id','caption') 返回值为QuerySet类型,内

Python学习之旅—Django基础

前言  前段时间业务比较繁忙,没时间更新博客,从这周开始将继续为各位更新博客.本次分享的主题是Django的基础部分,涵盖Django MTV三部分,并通过一个简单的班级管理系统来说明如何使用Django进行开发,好啦,开始今天的主题吧! 一.浅谈MVC.MTV和MVVM 要学习Django,我们很有必要了解下MVC,MTV和MVVM三种模式. [001]MVC MVC(Model View Controller 模型-视图-控制器)是一种Web架构的模式(本文不讨论桌面应用的MVC),它把业务

python学习笔记-Day18 -django(第一部分)

路由系统 第一种  一般设置方式 from django.conf.urls import include, url from django.contrib import admin from indexPage import views urlpatterns = [     url(r'^$', views.indexPage),     url(r'^reg/$', views.reg),     url(r'^home/$', views.home), ] 第二种 动态URL url(r

Python学习笔记23:Django搭建简单的博客网站(一)

上一节说了如何下载安装Django,这一节主要将如何使用Django创建运行一个网站. 一 新建工程 命令:django-admin startproject mysite # 有的需要输入:django-admin.py startproject mysite 这是你会发现在当前目录下,生成了一个文件夹mysite,其结构为: mysite/ manage.py mysite/ __init.py settings.py urls.py wsgi.py 其中: manage.py:一个命令行工

Python学习笔记(一)三步走安装pip

pip是用来方便地管理Python的第三方包的,由于此前玩Python仅仅是浅尝辄止,用的是python(x,y),但是这里并不代表你想用什么包都能从里面找到的,所以我把python(x,y)卸了,然后重新装了个Python2.7.5,准备尝试一下用pip来下载想要的包. 不过pip也有一个麻烦之处,如果电脑不能联网怎么办? 之后再考虑这个问题,先在此记录一下我是如何安装pip的.本文参考百度经验<如何在win7下安装python包工具pip>,网上有很多pip安装教程,但感觉这个写的是最简明

Python学习笔记24:Django搭建简单的博客网站(二)

上一节说道如何使用Django创建并运行一个项目,这节说如何添加一个博客应用. 一 项目跟应用的关系 在添加应用之前,先来看看项目与应用之间有什么不同之处呢? 项目是针对一个特定的 Web 网站相关的配置和其应用的组合.一个项目可以包含多个应用. 应用是一个提供功能的 Web 应用 – 例如:一个博客系统.一个公共记录的数据库或者一个简单的投票系统. 应用是"可插拔的":你可以在多个项目使用一个应用,你还可以分发应用,因为它们没有被捆绑到一个给定的 Django 安装环境中. 这样,我

Python学习笔记22:Django下载安装

Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C. 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件. 并于2005年7月在BSD许可证下发布.这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的. --百度百科 官网下载:https://www.djangoproject.com/download/ 官网中也给出了一些命令行安装方法,下面要说得是

Python学习笔记22:Django下载并安装

Django它是一个开源Web应用程序框架.由Python书面. 通过MVC软件设计模式,这种模式M,视图V和控制器C. 它最初是一个数字新闻内容为主的网站已经发展到管理劳伦斯出版集团.那是,CMS(内容管理系统)软件. 于2005年7月在BSD许可证下公布.这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的. --百度百科 官网下载:https://www.djangoproject.com/download/ 官网中也给出了一些命令行安装方法,以下要说得是下载的压缩

(一)Python 学习第一天--基础知识,列表

1. .pyc文件 .pyc文件:在python3中,当模块运行时会自动生成在_pycache_文件夹中,其中c为compiled的缩写. Python是一门现编译后解释的语言,在运行时首先寻找.pyc文件,若没有先到内存先编译再解释,生成.pyc文件.如果源文件发生改动,则先对比对应的.pyc文件与源文件的时间戳. 2.数据类型 在Python2中当值大于2^64位时,为long型:Python3不存在long型,所有都为int型. 3.三元运算符 result = 值1  if   条件