zoukankan      html  css  js  c++  java
  • Django之web框架和url路由

    一、web框架

    1.什么是web框架

       Web框架是用来进行Web应用开发的一个软件架构,开发者在基于Web框架实现自己的业务逻辑。Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。服务端和客户端两者的交互是基于请求的。具体流程是:客户端先请求(用户输入网址)------>按照http协议的请求协议发送请求------------>服务端接收到请求进行处理----------->服务端按照http协议的响应协议来响应请求------------>用户看到页面。

    2.MVCMTV模式

     1)MVC

     用于Web服务器开发的MVC模式,就是把Web应用分为模型(M),控制器(C)和视图(V)三层。其中模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。 

      

    2)MTV

     MTV模式含义:

     M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。

     T 代表模板 (Template):负责如何把页面展示给用户(html)。

     V 代表视图(View):   负责业务逻辑,并在适当时候调用Model和Template。

     此外,Django还有一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。

     MTV响应流程: 

       3.wsgiref模块

      真实开发中的python web程序分为服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。

      Django等Web框架属于应用程序,为了使应用程序和服务器程序配合使用,就必须设置统一的接口协议。这样服务器程序实现底层代码,而应用程序编写Web业务。WSGI就做了这事。

      WSGI(Web Server Gateway Interface)就是一种规范,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。

      常用的WSGI服务器有uwsgi、Gunicorn。而Python标准库提供的独立WSGI服务器叫wsgiref,Django开发环境用的就是这个模块来做服务器。

    二、URL路由

    (一)django概述

     1.项目目录介绍 

       最上面那个second_pro是项目的总目录。这个项目的文件都放在这个目录下。下面的app01和app02是不同的应用。应用文件下的views.py放在业务逻辑,models.py里放在数据库相关命令。Second_pro是项目文件,里面放着__init__文件、配置文件和路由文件。Templates文件夹下放着html文件。manage.py是启动文件。

    2.简单登陆页面

      1)url路由分发   urls.py

      2)在views.py里写index函数

       request是请求相关内容。render方法表示把index.html页面发送给浏览器。还有一种发送浏览器的方式是HttpResponse。

    3)写index.html文件

    templates文件夹下新建index.html文件。

      4)运行项目,在浏览器输入http://127.0.0.1:8000/index即可看到浏览器渲染的index.html页面效果。

    (二)、URL配置

    1.URL配置:建立url和相对应的视图函数之间的映射表。即当请求url时,执行对应的视图函数。

    2.基本格式:

    from django.conf.urls import url
    
    urlpatterns = [
    
         url(正则表达式, views视图函数,参数,别名),
    
    ]
    
    #如:url(r'^index/',views.index),
    

      

    3.注意事项:

    urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。
    
    若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。
    
    不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^index 而不是 ^/index。
    
    每个正则表达式前面的'r' 是可选的但是建议加上。

    4.正则表达式

    url(r'^index/',views/(d{4})/$,index)

    d{4}表示4位的数字;加个括号,表示在视图函数中可以取到这个值;$是完全匹配,表示只能匹配到前面这个路径。不加$,index/1234/22也能匹配到

     注意点:

    地址栏里访问index,后面可以不用加/,django会默认加/。但是在settings里设置APPEND_SLASH=False,当index是完全匹配时( url(r'^index/$', views.index),)此时我们再请求 http://127.0.0.1:8000/index 时就会提示找不到页面。

    (三)、分组命名匹配

     无名分组使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。

     有名分组使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。

     分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。

     比如 url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$表示url/articles/1998/12/4

     相应的,在视图函数中也要指定名字相同的参数。传递到试图函数的参数永远是字符串形式。

     视图函数中可以指定参数的默认值。匹配时没有参数传过来就使用默认值,有参数就用传过来的实际值。

    (四)、url路由分发include

     当有多个应用时,url需要分发到各自应用文件夹下的urls中。django提供路由分发接口include。

     方法  

      先在app01文件夹下新建urls.py文件。通过include,此时url/app01/开头的路径请求都去app01的urls.py文件里进行匹配。应用的urls.py文件和项目的urls.py文件一样。

     

  • 相关阅读:
    MYSQL
    数据中台的思考与总结
    基于SpringCloud分布式架构
    java常用工具库使用
    String性能提升10倍的几个方法
    Validator 注解使用
    【数据结构】trie树
    几种排序算法小结
    Core data的batch update
    UIScrollView和UIPageControl结合实现图片浏览
  • 原文地址:https://www.cnblogs.com/yq055783/p/12326284.html
Copyright © 2011-2022 走看看