Django-01

Web框架

1.Web应⽤程序处理流程  :

      

2.Web框架的意义
            1.⽤于搭建Web应⽤程序
            2.免去不同Web应⽤相同代码部分的重复编写,只需关⼼Web应⽤核⼼的业务逻辑实现
    3.Web应⽤程序的本质
            1.接收并解析HTTP请求,获取具体的请求信息
            2.处理本次HTTP请求,即完成本次请求的业务逻辑处理
            3.构造并返回处理结果——HTTP响应
            4.如何学习Web框架说明:

          

Django框架介绍

1.简介和特点
        1.简介:
            是⽤python语⾔写的开源web开发框架,并遵循MVC设计。
            Django的 主要⽬的是简便、快速的开发数据库驱动的⽹站。
        2.特点
            重量级的Web框架,功能⻬全
            遵循MVC设计
    2.设计模式
    MVC
        MVC,其核⼼思想是分⼯、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。
        M 全拼为Model,主要封装对数据库层的访问,对数据库中的数据进⾏增、删、改、查操作。
        V 全拼为View,⽤于封装结果,⽣成⻚⾯展示的html内容。
        C 全拼为Controller,⽤于接收请求,处理业务逻辑,与Model和 View交互,返回结果。
    MVT
        M 全拼为Model,与MVC中的M 功能相同,负责和数据库交互,进⾏数据处理。
        V 全拼为View,与MVC中的C 功能相同,接收请求,进⾏业务处理,返回应答。
        T 全拼为Template,与MVC中的V 功能相同,负责封装构造要返回的html。
 3.相关⽂档
        官⽅⽹站 https://www.djangoproject.com/
      GitHub源码 https://github.com/ django/ django
      中⽂版⽂档 https://yiyibooks.cn/xx/Django_1.11.6/index.html

搭建Django⼯程
    1.安装Django框架

创建虚拟环境 mkvirtualenv 虚拟环境名字 -p python3
        安装框架 pip install django==1.11.11

2.创建Django⼯程⽬录

命令
            django-admin startproject ⼯程名称
        步骤
            进⼊要创建⼯程的⽬录

django-admin startproject demo
        启动测试服务器 python manage.py runserver

3.创建Django⼦应⽤
        说明
            Django的视图编写是放在⼦应⽤中的。
        命令
            python manage.py startapp ⼦应⽤名称
        步骤
            进⼊到项⽬⽬录中
            python manage.py startapp users

安装⼦应⽤

INSTALLED_APPS = [
         ' django.contrib.admin' ,
         ' django.contrib.auth' ,
         ' django.contrib.contenttypes' ,
         ' django.contrib.sessions' ,
         ' django.contrib.messages' ,
         ' django.contrib.staticfiles' ,
         'users.apps.UsersConfig', # 安装users应⽤
                ]

4.创建视图并定义路由
        1.总路由⼊⼝ ROOT_URLCONF = 'demo.urls'
        2.总路由定义     demo.urls

urlpatterns = [
             url(r'^admin/', admin.site.urls),
             # 将 users应⽤中的所有路由包含进来
             url(r'^users/', include('users.urls')),]

3.⼦路由定义       Users.urls

urlpatterns = [
             # url(r'^路径$', views.视图),
             url(r'^index/$', views.index),
                  ]

4.视图定义     users.views

def index(request):
"""
定义django函数视图
:param request: 传⼊到函数视图的请求对象
:return: 响应对象
"""
    return HttpResponse('hello world')

配置⽂件、静态⽂件、路由说明
    1.settings.py配置⽂件说明
    2.静态⽂件使⽤
        1.配置静态⽂件的访问
            # 静态⽂件访问的路由
            STATIC_URL = '/static/'
            # 配置静态⽂件加载⽬录
            STATICFILES_DIRS = [
             os.path.join(BASE_DIR, 'static_files')
                      ]
        2.准备静态⽂件1
            项⽬根路径/静态⽂件夹/静态⽂件
            项⽬根路径/static_files/index.html
            http://127.0.0.1:8000/static/index.html
        3.准备静态⽂件2
            项⽬根路径/static_files/goods/detail.html
            http://127.0.0.1:8000/static/goods/index.html
    3.路由的使⽤
        1.Django解析路由的流程 :

    

2.路由定义位置
                1.总路由+⼦路由
                    总路由 url(r'^users/', include('users.urls')),
                    ⼦路由 url(r'^index/$', views.index),
                2.总路由 url(r'^users/index/$', views.index),
                3.⼦路由
                        总路由 url(r'^', include('users.urls')),
                        ⼦路由 url(r'^users/index/$', views.index),
    3.路由解析的顺序
        1.urlpatterns⾥⾯的路由解析的顺序
                ⾃上⽽下
            urlpatterns = [
             # url(r'^路径$', views.视图),
             url(r'^index/$', views.index, name= 'index'),
             # 以下代码演示路由⾃上⽽下匹配规则
             # url(r'^say', views.say), # 这个会拦截下⾯的路由
             # url(r'^sayhello', views.say_hello),
             url(r'^say$', views.say), # 定义路由要指明开始和结束
             url(r'^sayhello$', views.say_hello),
                    ]
        2.结论 ⼦路由需要有开始和结尾

4.路由命名空间和reverse反解析
        1.定义命名空间
            url(r'^users/', include('users.urls', namespace= 'users')),
            url(r'^index/$', views.index, name= 'index'),
        2.使⽤反向解析 'users/index/'
            url = reverse('users:index')
    5.路径以斜线结尾说明
        1.正则匹配路由结尾带斜线,如果⽤户输⼊的URL路径没有斜线,当找不到该路由时 浏览器会⾃动的重定向到带斜线的路由
        2.正则匹配路由结尾不带斜线,如果⽤户输⼊的URL路径有斜线,直接报404错误

请求对象:
    1.利⽤HTTP协议向服务器传参的⼏种途径
        请求⾏中的路径
        查询字符串
        请求体
        请求头
    2.使⽤正则提取URL中参数
        1.位置参数
            # url(r'^weather1/([a-z]+)/(\d{4})/$', views.weather),
            def weather1(request, city, year):
             """读取正则中的组提取的参数"""
             print( 'city=%s' % city)
             print( 'year=%s' % year)
             return HttpResponse('OK')
        2.关键字参数
            # url(r'^weather2/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather2),
            def weather2(request, year, city):
             """读取正则中的关键字提取的参数"""
             print( 'city=%s' % city)
             print( 'year=%s' % year)
             return HttpResponse('OK')
    3.提取查询字符串参数
            1.需求 提取问号后⾯的查询字符串
                    /weather3/beijing/2018/?a=10&b=20&a=30
            2.属性 GET
                    request.GET
                    返回QueryDict类型的对象
            3.QueryDict类型
                    可以存储⼀键⼀值和⼀键多值
                    提供get()⽅法 读取⼀键⼀值
                    提供getlist()⽅法 读取⼀键多值
            4.代码演练
                    # /weather3/beijing/2018/?a=10&b=20&a=30
                    def weather3(request, year, city):
                     """提取查询字符串参数"""
                     print( 'city=%s' % city)
                     print( 'year=%s' % year)
                     a = request.GET.get('a')
                     b = request.GET.get('b')
                     a_list = request.GET.getlist( 'a')
                     print( a,b,a_list)
                     return HttpResponse('OK')
    4.提取请求体中的参数
            1.提取请求体中的表单数据
                1.属性
                    POST
                    request.POST
                    返回QueryDict类型的对象
                2.代码演练

 # url(r'^get_body_form/$', views.get_body_form),
def get_body_form(request):
  """演示获取请求体中的表单"""
    a = request.POST.get('a')
    b = request.POST.get('b')
    alist = request.POST.getlist( 'a')
    print(a)
    print(b)
    print( alist)
    return HttpResponse('OK')

2.提取请求体中的⾮表单数据
                1.属性
                    body
                    request.body
                2.代码演练

# url(r'^get_body_json/$', views.get_body_json),
# {"a": 1, "b": 2}
def get_body_json(request):
"""演示获取请求体中的⾮表单数据"""
    print(request.META['CONTENT_TYPE'])
    print(request.method, request.path)
    json_str = request.body
    json_str = json_str.decode()
    req_data = json.loads( json_str)
    print(req_data['a'])
    print(req_data['b'])
    return HttpResponse('OK')

5.提取请求头中的信息
            1.提取⽅案
            2.代码实现 print(request.META['CONTENT_TYPE'])
    6.其他请求报⽂信息
            print(request.method, request.path)

响应对象:
    1.HttpResponse
     1.常规⽤法
          # HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
          # 注意点:响应体参数是必传的
          return HttpResponse('OK', content_type= 'text/html', status= 200)
       2.⾃定义响应头
              # 创建响应对象
             response = HttpResponse('OK', content_type= 'text/html', status= 200)
              # ⾃定义响应头:键值对;⾃定义响应头键 Itcast, 值 Python
                 response[' subject' ] = 'Python'
                 return response
     2.JsonResponse

# GET /response_json/ (表示⽤户向我们索取json)
def response_json(request):
"""响应json数据"""
    # 准备字典: json字符串的key,需要双引号
    json_dict = {"name": " python" , "age": 25}
    # 默认会设置状态码
    # 默认会将数据类型设置为 Content-Type: application/json
    # 默认会将json字典转json字符串, 再将json字符串转⼆进制响应给⽤户
    return JsonResponse( json_dict)

3.重定向
                 # GET /response_redirect/
               def response_redirect(request):
                       """重定向"""
               # 需求:重定向到users应⽤的index视图
               # 使⽤最原始的⽅式
               # return redirect('/users/index/')
               # 使⽤反向解析实现重定向
                    return redirect(reverse('users:index'))
       4.render 响应模板数据的,后续模板时会使⽤响应模板数据的,后续模板时会使⽤

相关源码连接:

github,技术交流,欢迎指教

django 基础框架学习 (一)的更多相关文章

  1. django 基础框架学习 (三)

    Django框架基础-03数据库新增数据    1.save⽅法        >>> from datetime import date        >>> f ...

  2. django 基础框架学习 (二)

    Django框架基础-02 Django缓存cookie 1.说明        当我们服务器在响应数据的同时,希望写⼊⼀些缓存数据到客户端        我们可以选择在响应的同时,将要写⼊到客户端的 ...

  3. WEB框架-Django框架学习-预备知识

    今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...

  4. Python学习(二十六)—— Django基础一

    转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...

  5. Django 基础 web框架本质

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. import socket sk ...

  6. day 52 Django基础一之web框架的本质

    Django基础一之web框架的本质   django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...

  7. Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)

    摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大主流Web ...

  8. django基础(web框架,http协议,django安装)

    学习Django之前我们先来看什么是OSI七层模型: 应用层 表示层       应用层(五层模型中把这三层合成一个应用层) http协议 会话层 传输层                  提供端口对 ...

  9. Web框架django基础篇

    基本配置及学习  路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...

随机推荐

  1. JDK 8 - java.util.HashSet 实现机制分析

    JDK 8 Class HashSet<E> Doc: public class HashSet<E> extends AbstractSet<E> impleme ...

  2. Oracle 静默安装oracle client

    静默安装oracle clint比较简单,修改instantclient.crsp文件的几个位置即可 [root@localhost ~]# vi /etc/oralnstloc inventory_ ...

  3. mybatis 学习五 动态SQL语句

    3.1 selectKey 标签 在insert语句中,在Oracle经常使用序列.在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键.使用myBatis的selectKey ...

  4. 冷扑大师AI简史:你用德扑来游戏,人家用来发Science

    前言 人类又输了...... 创新工场组织的一场“人工智能和顶尖牌手巅峰表演赛中”,机器人AI冷扑大师赢了人类代表队龙之队 792327 记分牌,最后 200 万奖励归机器人所有. 在围棋项目上人类的 ...

  5. 类型:sqlserver;问题:版本;结果:sqlserver版本区分

    LocalDB (SqlLocalDB)LocalDB 是 Express 的一种轻型版本,该版本具备所有可编程性功能,但在用户模式下运行,并且具有快速的零配置安装和必备组件要求较少的特点.如果您需要 ...

  6. oracle时间段查询-从00:00:00开始

    之所以记录一下这篇博文,是因为前段时间搞的一个查询发现要从00:00:00这个时间段开始,必须要通过拼接字符串. <select id="queryApplyProgressList& ...

  7. LaTeX数学公式基础

    LaTeX数学公式 参考:https://www.cnblogs.com/Sinte-Beuve/p/6160905.html 原博客显示有点问题,重新搬运整理LaTeX数学公式部分的基本用法 基础 ...

  8. [Python Study Notes]一个简单的区块链结构(python 2.7)

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  9. 第4章_Java仿微信全栈高性能后台+移动客户端

    基于web端使用netty和websocket来做一个简单的聊天的小练习.实时通信有三种方式:Ajax轮询.Long pull.websocket,现在很多的业务场景,比方说聊天室.或者手机端onli ...

  10. Blender 工具使用—–准星

    Blender 工具使用-–准星 移动准星 直接按鼠标左键 将准星放置在坐标原点 快捷键Shift + C 将准星放置到指定位置 比如下面这个位置: 按Shift + S快捷键组合,弹出一个工具栏,选 ...