-------------Django-----URLS路由

1、相约Django。html

  一、Django的特色:Django定义了服务分布、路由映射、模板编程、数据处理的一套完整的功能。python

    (1)集成数据访问组件:Django的model层自带数据库ORM组件。web

    (2)URL映射:Django使用正则表达式管理URL映射。正则表达式

    (3)后台管理系统自动生成。数据库

  二、Django的结构:Django遵循MVC架构的web开发框架。django

    (1)管理工具management:内置的建立站点、迁移数据、维护静态文件的命令工具。编程

    (2)模型model:提供数据访问接口和模块。包括数据字、元数据、数据关系等。服务器

    (3)视图view:Django的视图层封装了HTTP request和response的一系列操做和数据流。主要是URL映射机制和绑定模板。数据结构

    (4)模板temlate:一套Django本身的页面渲染模板语言,用内置的tags和filters定义页面的生成方式。架构

    (5)表单form:经过内置的数据类型和控制组件生成HTML表单。

    (6)管理站admin:经过声明须要管理的model,快速生成后台数据管理网站。

2、安装Django。

  Mac和Linux使用命令安装:

  Win安装:若是你还未安装Python环境须要先下载Python安装包。

    一、Python 下载地址:https://www.python.org/downloads/

    二、Django 下载地址:https://www.djangoproject.com/download/

  注意:目前Django 1.6.x以上版本已经彻底兼容Python 3.x。

  Python 安装(已安装的可跳过):

    安装Python你只须要下载python-x.x.x.msi文件,而后一直点击"Next"按钮便可。

    安装完成后你须要设置Python环境变量。 右击计算机->属性->高级->环境变量->修改系统变量path,添加Python安装地址,实例使用的是C:\Python33,你

  须要根据你实际状况来安装。

 

 

 

 

3、组建第一个project。

  一、建立project。

  (1)字符终端Termiral下可使用命令:django-admin startproject XXOO(XXOO为项目名,看心情随意起)。

  (2)建立成功后,切到项目名的路径下:cd XXOO

      在正规军的当前目录中创建了一个子目录正规军,并在其中生成了Django开发的默认文件。

 

   正规军/

    manage.py :是Django用于管理本项目的命令行工具,进行站点运行,数据库自动生成、静态文件收集。

    正规军/ :内层的正规军目录中,包含了本次项目的实际文件。由于有__init__.py,全部这是一个Python包。

      __init__.py

      settings.py : 是Django项目的配置文件,其中定义了该项目引用的Django组件和Django项目名。

      urls.py : 是维护项目的URL路由映射,即定义客户端访问的URL由哪个Python模块解释并提供反馈。默认是定义admin为管理员站点的解释器。

      wsqi.py : 定义WSGI的接口信息,用于与其余web服务器集成。

                         

 

  二、建立应用:

  (1)命令建立包名:python manage.py startapp XO(XO为包名,也就是应用包) 。

      写多个包app是为了功能划分,分开不一样的业务线。

      该包的功能是实现具体的某些功能。例如:admin-------是Django自带的后台管理的相关配置。

                         model-------是根据类建立的数据库表,是写类的。

                         test---------是进行单元测试的。

                         views(视图)---这个包的函数,该包或该业务相关的具体的功能基本上都写在这。

                         migration-----数据库相关所使用的。

  (2)views中的内容能够造成一个包,将views中的具体功能函数每个都单独写。在使用中,能够去views中调用方法便可,能够对业务进行更细的划分。

 

  三、

 

 

 

Django知识点归纳:

    

 

 

 4、Django视图层:做用是衔接HTTP请求,Python程序,HTML模板

  一、路由系统URL:本质是使URL和函数对应上关系。

  (1)一一对应(静态路由):为一个URL对应一个相应的函数

    /login/ ----> def login()

    一个login对应一个login函数

  (2)URL后能够跟正则表达式(动态路由):(位置)

    /login/(\正则表达式) /-----> 对应函数def

    login/(\w+)/ ------> 这时的视图函数不能以get收数据,而是以参数的形式接受 下面的a1就是那个参数。有多少个正则,就多少个a ~,而且是按顺序接收  ^_^ !

                  def XXOO(request,a1):

                    print(a1)

                    return HttpResponse('......')

       (\W+)取代了以前的?nid=XXXXX,这样起到了SEO的优化,提升页面的权重

  (3)URL中的正则表达多,传递的参数多,能够对传参进行编号。(可命名)

    /add—user/(?P<a1\d+)/ ----->  def add_user(request,a1)

                        在正则前加上 ?P<a1> 的意思是在视图函数中,找参数时,及时aXXXX是无序的,也会按照a后的号码进行查找参数。

    【1】终止符:在URL中加“/”或终止符$

    【2】伪静态:edit/(\w+).html 其中.html 就是伪静态。

      伪静态:静态网址的访问速度高于动态网址,而伪静态就是将动态网址假装成静态网址,提升访问权重。加快访问响应。

    二、3在函数中均可用*args **kwargs 取代位置参数和可命名的参数,可是在url中也要统一用法。

  (4)路由分发:(能够设置默认页面)

    在与项目名相同包名的url文件中,加入Django.conf.urls 中导入的include方法,在URL中写出指定的应用包名。例如app1,在使用include方法是项目包中的URL定位到app01的url并与app01中的URL相关联,

    url(r'^app01/', include('app01.urls')),

    它的流程是在项目中的URL中匹配出app01的url,再在app01的URL中匹配出对应URL的函数去执行。 

    能够指定URL,当访问的URL不存在时,可使其跳转到指定的页面

    在项目包的URL中:

      from django.shortcuts import HttpResponse  

      def default(request):

          return HttpResponse('.......')

      在URL中:url(r'', default),    就能够了。

       也可使app01的错误页面跳转到指定的页面

       url(r' ', include('app01.url.index')),    ,就能够了。         

  (5)根据名称反向生成URL:(给URL定义一个名字,之后就能够经过名字找到URL,能够经过名字反生成URL)

      在项目包的URL中,URL用正则接受传值,若是用(?P<a>\w+)那么在views中的函数v的值就不能是args ,而是kwargs{‘a1’:11111111}

      url(r' index/(\w+)', views.index, name='n1'),  

      在view中

      from django.urls import reverse

      def index(requrest):

        user_list = [

          ' wangzhe', ' george', ' jony'

        ]

      v = reverse('n1',args=(XXXXXXX))      args就是参数传的值。

      print(v)

      return render()

    在写页面是的action的URL地址就能够写成{ %  url “n1”%}

    在取值时也能够在a标签中写成{% url ‘n1’ i%}若是正则传多值,那“ i ”就多加几个,用空格隔开。

  二、视图函数:是Django中开发者处理HTTP请求的Python函数,视图函数的功能是经过模型层对象处理数据,而后用(1直接构成HTTP body,2用数据渲染html模板文件,3若有逻辑错误,则返回http错误或其余状态)一种方法返回HttpResponse。

    (1) 直接构造html页面:直接在视图函数中构造返回给客户端的字符串,经过httpresponse()函数封装后返回,给相应的服务器的时间给客户端

        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) 

    (2)用数据渲染HTML模板文件:模板的内容能够很是丰富,因此使用渲染模板文件的方法返回页面是最多见的Django视图函数技术,模板渲染经过render()函数实现。

      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,'temlates/moment.html',{'headline':m.headline,'user':m.user_name})

            render()函数中,第一个参数是http中的request的返回值,第二个参数是模板文件名,第三个参数是以字典形式表达的模板参数。

    (3)返回HTTP错误:

      HTTP错误经过HTTP头中的status表达,经过给httpresponse构造函数传递status参数,能够返回HTTP错误或状态。

      from django.http import HttpResponse

      def my_view(request):

        return HttpResponse(status=404)

      

      

  三、模板语法:

    (1)变量替换:

    (2)过滤器:

    (3)流程控制:

    (4)模板继承:

    

5、Django模块层:主要是ORM的操做。

  一、基本操做:Django模型开发的任务就是定义模型类和属性。每一个模型类都均可以映射为数据库中的一个数据表,而类属性被映射为数据字段。数据库表的主键,外键,约束,均可以经过类属性完成定义。

    (1)模型类的定义:基本结构↓^_^:

      from django.db import models               #全部的Django模型继承都是来自Django.db    models.Model类

      class ModelName(models.Model):

        field1 = models.XXfield(...........)         #经过类属性定义模型的字段,模型的字段必须是models.XXField类型

        field2 = models.XXfield(...........)  

        .......

        class Meta:  ---------------#模型类中的meta子类定义模型元数据, 能够定义数据库表名,数据默认排列方式等。meta类的属性名由Django预约义。

          db_table = ...

          other_metas = ...

      经常使用的meta类的属性:

        abstract: True or False   标识本类是否为抽象了。

        app_label:定义本类的所属应用,好比app_label = ‘myapp’

        db_table:映射的数据表名,db_table = ‘moment’

        注:如何meta中不提供db_table字段,那么Django会为模型自行生成数据表名,生成的格式会为“应用名_模型名”,好比应用app的模型comment的默认数据表名为“app_comment”

 

    (2)普通字段的类型:

    (3)经常使用字段的参数:

    (4)基本查询:

    (5)数据保存及删除:

    

  二、关系操做:

    (1)一对一:

    (2)一对多:

    (3)多对多:

  三、面向对象的ORM:

    ORM(Object Relational Mapping,简称ORM)为对象关系映射,是为了解决面向对象与关系数据库之间互不匹配而产生的技术。

    Django模型中的ORM之因此强大,是由于能够支持模型继承。它将Python的面向对象和数据库面向关系表的数据结构相结合。就有了ORM的三种风格。

    抽象类继承:父类来自models.Model,但不会在底层数据库中生成相应的数据表,父类的属性列存储在其子类的数据表中。

    多表类继承:多表继承类的每一个模型都在底层数据库中生成相应的数据表管理数据。

    代理模型继承: 父类用于在底层数据库中管理数据表,而子类不定义数据列,只定义查询数据集的排序方法等元数据。

    (1)抽象类继承:

    (2)多表类继承:

    (3)代理模型继承:

相关文章
相关标签/搜索