django预热

课堂笔记:

day60 2018-04-27

1. 今日内容
    1. 概括
        1. 98%的时间都是在写例子 帮你理解Django  --> 由我们写的例子对比理解Django框架
        2. 安装Django
    2. 写例子
        
        
        
        用户的浏览器(socket客户端)
            3. 客户端往服务端发消息
            
            6. 客户端接收消息
            
            7. 关闭
        
        
        
        JD的服务器(socket服务端)
            1. 启动,监听
            2. 等待客户端连接
            
            4. 服务端收消息
            5. 服务端回消息
            
            7. 关闭
        
        
        
        FTP作业:
            
            FTP客户端:  PUT,1024.avi,2048
            
            FTP服务端:  .split("|")
    
        浏览器和服务端通信都要遵循一个HTTP协议(消息的格式要求).
        
        
        关于HTTP协议:
            1. 浏览器往服务端发的叫 请求(request)
                请求的消息格式:
                    请求方法 路径 HTTP/1.1

                    k1:v1

                    k2:v2

                    

                    请求数据
                
            2. 服务端往浏览器发的叫 响应(response)
                响应的消息格式:
                    HTTP/1.1 状态码 状态描述符

                    k1:v1

                    k2:v2

                    

                    响应正文   <-- html的内容
    
    动态的网页:
        本质上都是字符串的替换
    字符串替换发生在什么地方:
        在服务端替换完再返回给浏览器!!!
        
    总结一下:
        1. web框架的本质:
            socket服务端  与 浏览器的通信
        2. socket服务端功能划分:
            a. 负责与浏览器收发消息(socket通信)  --> wsgiref/uWsgi/gunicorn...
            
            b. 根据用户访问不同的路径执行不同的函数
            
            c. 从HTML读取出内容,并且完成字符串的替换  --> jinja2(模板语言)
            
        3. Python中 Web框架的分类:
            
            1. 按上面三个功能划分:
                1. 框架自带a,b,c                 --> Tornado
                2. 框架自带b和c,使用第三方的a    --> Django
                3. 框架自带b,使用第三方的a和c    --> Flask
            2. 按另一个维度来划分:
                1. Django   --> 大而全(你做一个网站能用到的它都有)
                2. 其他     --> Flask 轻量级
        
        
        
    3. 新建Django项目
        命令行创建:
            django-admin startproject mysite
        pycharm创建:
            1. File --> New project --> 左侧选Django --> 右侧填项目路径,并且勾选python.exe
        
    4. 设置Django项目:
        1. settings.py
            1. 配置HTML文件存放的位置
            2. 配置静态文件存放的位置
    

2. 作业
    1. 用Django框架把我们之前写过登录的页面返回给浏览器
View Code

不完善的服务端实例:

# -*- coding: utf-8 -*-
'''
不完善的web服务端实例
'''

import socket

# 生成socket对象
sk = socket.socket()
# 绑定ip和端口
sk.bind(('127.0.0.1', 8001))
# 监听
sk.listen()

# 写一个死循环,一直等待客户端的链接
while 1:
    # 获取与客户端的链接
    conn ,_ = sk.accept()
    # 接收客户端发来的消息
    data = conn.recv(8096)

    print(data)
    # 给客户端回复消息
    conn.send(b'http/1.1 200 OK
content-type:text/html; charset=utf-8

')
    # 想让浏览器再页面上显示出来的内容都是响应正文
    conn.send(b'<h1>hello world</h1>')
    # 关闭
    conn.close()
    sk.close()
View Code

浏览器输入 http://127.0.0.1:8001/ 

根据路径返回不同的页面

# -*- coding: utf-8 -*-
'''
不完善的web服务端实例
'''

import socket

# 生成socket对象
sk = socket.socket()
# 绑定ip和端口
sk.bind(('127.0.0.1', 8001))
# 监听
sk.listen()


# 定义处理yimi的函数
def yimi(url):
    with open('haiyan.html', 'rb') as f:
        res = f.read()
        return res


# 定义处理yimi的函数
def xiaohei(url):
    with open('xiaohei.html', 'rb') as f:
        ret = f.read()
        return ret


# 定义一个处理404的
def f404(url):
    res = '你访问的地址{}找不到'.format(url)
    return bytes(res, encoding='utf-8')


url_func = [
    ('/yimi/', yimi),
    ('/xiaohei/', xiaohei),
]
# 写一个死循环,一直等待客户端的链接
while 1:
    # 获取与客户端的链接
    conn, _ = sk.accept()
    # 接收客户端发来的消息
    data = conn.recv(8096)
    data_str = str(data, encoding='utf-8')
    print(data_str)
    # 用回车换行来切分成数组
    l1 = data_str.split('
')
    l2 = l1[0].split()
    url = l2[1]
    print(data)
    # 给客户端回复消息
    conn.send(b'http/1.1 200 OK
content-type:text/html; charset=utf-8

')
    # 想让浏览器再页面上显示出来的内容都是响应正文
    for i in url_func:
        if i[0] == url:
            func = i[1]
            break
    else:
        func = f404
    response = func(url)
    conn.send(response)
    # 关闭
    conn.close()
View Code

两个html代码片段:第一个名字是  haiyan.html   第二个名字是:xiaohei.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>海燕</title>
</head>
<body>
<h1>web 框架本质是什么鬼002啦啦啦</h1>
<p>海燕blablabla</p>
<p>恩,其实这里已经是本质了呢</p>
</body>
</html>
View Code
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>小黑</title>
</head>
<body>
<h1>web 框架本质是什么鬼002啦啦啦</h1>
<p>这里是小黑</p>
<p>恩,其实这里已经是本质了呢</p>
</body>
</html>
View Code

 两个正确的url地址:http://127.0.0.1:8001/xiaohei/  http://127.0.0.1:8001/yimi/

1105 day60 结束 学习了,django项目目录的分类,
                        页面都放在templates下,
                        static文件新设置一个目录,加了配置才能对应起来 
                        BASE_DIR是项目的根目录
                        urls.py是区分设置根据路径区分网页的地方
                        cmd 进入到项目目录后 python mange.py runserver 8001  默认是8000端口号    的方式来启动项目
View Code
原文地址:https://www.cnblogs.com/Simonsun002/p/9873949.html