• django初识


    web应用的本质

    web的本质:请求,处理,响应

    socket网络编程

    ​ 架构:C/S架构

    ​ TCP/UDP协议

    ​ 传输层

    web应用

    ​ 架构:B/S架构

    ​ 协议:http协议

    ​ 应用层

    字符串转字节:bytes('aaaa',encoding='utf8')

    字节转字符串:str(res,encoding='utf8')

    web框架本质

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端

    import socket
    
    
    def handle_request(client):
        data = client.recv(1024)
        client.send(bytes("HTTP/1.1 200 OK
    
    ", encoding='utf-8'))
        client.send(bytes('aaa',encoding='utf8'))
    
    
    def main():
        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        sock.bind(('127.0.0.1',8000))
        sock.listen(5)
    
        while True:
            conn,add = sock.accept()
            handle_request(conn)
            conn.close()
    
    
    if __name__ == '__main__':
        main()
    

    HTTP协议

    请求

    由三部分组成:请求行,请求头,请求体

    ​ 请求头后面会有一个换行,然后是请求体

    请求行

    ​ 请求方法,页面地址,协议版本

    GET/BOOK/JAVA.HTML HTTP/1.1
    

    请求头

    ​ 由key/value 组成,告诉服务端需要的资源类型。

    Accept:用于告诉服务器,客户机支持的数据类型  (例如:Accept:text/html,image/*)
    
    Accept-Charset:用于告诉服务器,客户机采用的编码格式
    
    Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
    
    Accept-Language:客户机语言环境
    
    Host:客户机通过这个服务器,想访问的主机名
    
    If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
    
    Referer:客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链)
    
    User-Agent:客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器版本等)
    
    Cookie:客户机通过这个头,将Coockie信息带给服务器
    
    Connection:告诉服务器,请求完成后,是否保持连接
    
    Date:告诉服务器,当前请求的时间
    

    请求体

    ​ 包括请求的一些数据

    ​ get请求通过url给服务器传值,post请求通过表单给服务器传值

    name=dylan&id=110
    

    响应

    由三部分组成:响应行,响应头,响应体

    响应行

    ​ 协议版本,响应状态,响应结果

    HTTP/1.1  200 OK
    

    响应头

    Location:这个头配合302状态吗,用于告诉客户端找谁
    
    Server:服务器通过这个头,告诉浏览器服务器的类型
    
    Content-Encoding:告诉浏览器,服务器的数据压缩格式
    
    Content-Length:告诉浏览器,回送数据的长度
    
    Content-Type:告诉浏览器,回送数据的类型
    
    Last-Modified:告诉浏览器当前资源缓存时间
    
    Refresh:告诉浏览器,隔多长时间刷新
    
    Content-Disposition:告诉浏览器以下载的方式打开数据。例如: context.Response.AddHeader("Content-Disposition","attachment:filename=aa.jpg");                                        context.Response.WriteFile("aa.jpg");
    
    Transfer-Encoding:告诉浏览器,传送数据的编码格式
    
    ETag:缓存相关的头(可以做到实时更新)
    
    Expries:告诉浏览器回送的资源缓存多长时间。如果是-1或者0,表示不缓存
    
    Cache-Control:控制浏览器不要缓存数据   no-cache
    
    Pragma:控制浏览器不要缓存数据          no-cache
    
    Connection:响应完成后,是否断开连接。  close/Keep-Alive
    
    Date:告诉浏览器,服务器响应时间
    

    响应体

    ​ 包含浏览器能够解析的静态内容,例如:html,纯文本,图片等等信息

    "hello world"
    

    django的安装和启动

    安装方法

    ​ pip install django1.11.22(前后不要有空格)

    ​ pycharm安装

    django的创建

    ​ django-admin startproject 项目名

    ​ ps:项目名不要有括号和特殊字符

    ​ pycharm创建

    需要的操作

    到settings.py中, 配置:
    1.  STATIC_URL = '/static/'
    	STATICFILES_DIRS = (
    		os.path.join(BASE_DIR, 'static'),
    	)
    逗号不能少
    static目录需要创建
    
    
    2.  MIDDLEWARE = [
    	'django.middleware.security.SecurityMiddleware',
    	'django.contrib.sessions.middleware.SessionMiddleware',
    	'django.middleware.common.CommonMiddleware',
    	#'django.middleware.csrf.CsrfViewMiddleware',
    	'django.contrib.auth.middleware.AuthenticationMiddleware',
    	'django.contrib.messages.middleware.MessageMiddleware',
    	'django.middleware.clickjacking.XFrameOptionsMiddleware',
    	]
    
    3. 'DIRS': [os.path.join(BASE_DIR, 'templates')]
    

    django目录结构

    s9day54:
    	s9day54:
    		settings.py: 配置文件
    		urls.py: 路由映射关系
    		wsgi.py : socket服务端文件
    	static:(自创)
    		css
    		js
    		img
    	templates:
        	html模版
    	manage.py: 管理文件
    

    django服务

    ​ pycharm启动

    django的路由介绍

    添加路由和函数的对应关系:

    在urls.py文件中操作

    return HttpResponse:它是作用是内部传入一个字符串参数,然后发给浏览器

    from django.shortcuts import HttpResponse
    
    
    	urlpatterns = [      
    		# url(r'^admin/', admin.site.urls),      
       		url(r'^index/', index),   
       		]
       			
    def index(request):      
    	return HttpResponse('index')
    

    django连接数据库操作

    ​ pymsql连接

    ​ 连接数据库的函数写在urls.py文件中

    from django.shortcuts import HttpResponse,render
    
    def index(request):
        return HttpResponse('index')
    
    def h1(request):
        import pymysql
        conn = pymysql.connect(
            host = '127.0.0.1',
            port = 3306,
            user = 'root',
            password = 'admin123',
            database = 'django0807'
        )
        course = conn.cursor(pymysql.cursors.DictCursor)
        sql = 'select  * from student'
        course.execute(sql)
        data = course.fetchall()
    
        return render(request,'h1.html',{"data":data})
    

    ​ 从数据库中获取的数据是以字典形式传到html页面中,在html页面中遍历字典,最后显示在页面

     {% for i in data %}
        <tr>
            <td>{{ i.id }}</td>
            <td>{{ i.name }}</td>
            <td>{{ i.age }}</td>
            <td>{{ i.class_id }}</td>
        {% endfor %}
    
  • 相关阅读:
    车厢调度
    字符串匹配问题x
    单词查找树
    【説明する】树
    计算(calc.cpp) 这题我搞了2晚上qwq
    [HDOJ4578]Transformation(线段树,多延迟标记)
    [Codeforces670A]Holidays(数学,构造)
    [Codeforces677C]Vanya and Label(组合数学,快速幂)
    [Codeforces677B]Vanya and Food Processor(模拟,数学)
    [Codeforces673C]Bear and Colors(枚举,暴力)
  • 原文地址:https://www.cnblogs.com/einsam/p/11400077.html
Copyright © 2020-2023  润新知