• django1-web开发基础知识


    1.http概述

      当前版本:1.1

      http协议是一个客户端和服务端请求应答的标准TCP,如浏览器作为客户端发送请求到服务器指定端口 ,服务器将内容返回给服务器

    2.协议格式

      http定义了客户端与服务端数据交互的协议

      request客户端向服务端发送请求报文 ,包括请求行(请求方法 空格 url 空格 协议版本 回车符换行符) ,请求头(key:value 回车符换行符 key:value 回车符换行符*2),请求数据

    ####一个request请求(get没有请求数据,携带在url上)
    b'GET /favicon.ico HTTP/1.1 Host: 127.0.0.1:8888 Connection: keep-alive Sec-Fetch-Mode: no-cors User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 Accept: image/webp,image/apng,image/*,*/*;q=0.8 Sec-Fetch-Site: same-origin Referer: http://127.0.0.1:8888/ Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 '

      response服务端响应客户端数据 ,包括状态行(协议版本 空格 状态码 空格 状态码描述 回车符换行符),响应头(key:value 回车符换行符:value 回车符换行符*2),响应数据

    HTTP/1.1 200 OK
    Content-Length: 643
    Content-Type: text/plain; charset=UTF-8
    Date: Thu, 15 Aug 2019 06:01:10 GMT

      统一资源定位符:协议 地址 端口 路径 参数

      请求头中一般有浏览器信息,cookie

      响应头中一般有编码,时间

    3.创建最简单的http服务端

    import socket
    ser1 =socket.socket()
    ser1.bind(('127.0.0.1',8888))
    ser1.listen(5)
    
    while 1:
        conn.addr = ser1.accept()
        data = conn.recv(1024)
    
        print(data)     #请求request数据
    

        conn.send(b'HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 ')  #响应数据http协议

        conn.send('<h1>hello world</h1>'.encode('utf-8'))    #数据

        conn.close()

    ser1.close()

    4.动态页面与静态页面

      动态页面就是与后端交互获取数据展示页面 ,静态页面就是展示页面不能交互

    5.服务器程序与应用程序

      web程序的三大块:1.负责socket连接请求 2.根据不同地址路径返回不同内容 3.返回动态页面

      服务器程序完成了socket的连接的部分 ,但是它不关心业务逻辑代码处理连接请求

      应用程序完成了业务逻辑相关代码 django框架完成这部分,返回什么页面 ,不考虑如何与客户端连接

      问题:服务器程序与应用程序之间如何交互规则 ,wsgi服务器网关接口(生产的uwsgi ,django默认使用了wsgiref))

       https://blog.csdn.net/qq_38038143/article/details/80291234   nginx+uwsgi+django

    6.python的其他框架

      django完成了业务逻辑代码+动态页面返回 

      flask完成了业务逻辑代码

      tornado完成了服务器程序+业务逻辑代码+返回动态页面

    7.软件设计架构模式

      1)MVC框架

        controller+model+view

        控制器:业务逻辑 ,访问地址 ,执行函数

        模型: 数据库模型避免sql

        视图: 展示的动态页面

      2)MTV框架

        django根据mvc重新设计了一下model+templates+view

        模型: orm数据库对象关系模型

        模板: 负责展示给用户的页面

        视图: 负责业务逻辑

        额外的: url路由分发器

      二者比较:

        mvc可以说是广义 ,控制器对应mtv的视图函数与路由 ,视图对应模板 ,模型一直

    8.django中的request与reponse对象

      request请求对象是视图函数中的必要参数 ,对象封装了本次请求的http协议中的所有相关信息

        request.method          #请求类型, 在cbv中dispatch方法会将该类型与已知列表匹配 ,反射获取我们自定义的方法执行

        request.GET.get('关键字')       #从GET请求中获取参数 ,可以获取url中?后面的参数

        request.GET.urlencode()      #获取GET请求上的参数 ,并进行编码

        request.POST.get('关键字')     #从POST请求中获取表单中的内容值 ,表单中提交的内容可以根据这个方法获取

        request.path_info          #获取请求路径信息 ,不包含地址端口 ,?后的参数

        request.body            #请求体 ,仅post请求有 ,有明文的请求数据

        request.scheme          #本次请求协议 http https

        request.encoding           #获取提交数据的编码方式

        request.COOKIES         #获取COOKIES

        request.session           #获取session信息

        request.FILES           #用于上传文件 ,需要放入form表单中 且enctype="multipart/form-data"   

       response响应的几种方式

        HttpResponse('字符串')       #可以直接返回html标签 或字符串

        render(request ,'模板文件名' ,{'参数1':1,'参数2':2})  #返回模板页面 ,还可以返回request对象和参数给模板文件名

        redirect(重定向)           #重定向到其他url

        JsonResponse(data,safe=False)                       #将数据转为json类型返回 ,如果数据是字典可以不加safe=False

        

    9.文件上传简例

    ####urls.py
        url(r'^file/', views.file.as_view(), name='file'),
    ####views.py
        class file(View):
        def post(self, request):
            upfile = request.FILES.get('upfile')
            with open('testfile.txt', mode='w', encoding='utf-8') as f1:
                for i in upfile.chunks():
                    f1.write(i.decode('utf-8'))
            return HttpResponse('上传完成')
    ####html模板
        <form action="{% url 'file' %}" enctype="multipart/form-data" method="post">
            <input type="file" name="upfile"> <button type="submit">上传</button>
        </form>

       

  • 相关阅读:
    sqlserver2005"此数据库没有有效所有者,因此无法安装数据库关系图支持对象"的解决方法
    重复表的复制操作
    重复表中连级下拉框采用数据源时,子级下拉框列表数据无法持久的问题
    SQL server2005连接与进程
    重复表操作
    XPath语法
    Request.ServerVariables 参数大全
    50个Sql语句
    Inside C++ new/delete and new[]/delete[]
    颜色空间
  • 原文地址:https://www.cnblogs.com/quguanwen/p/11358525.html
Copyright © 2020-2023  润新知