django_01

web应用本质

socket网络编程:

架构: c/s架构

协议: tcp/udp协议

作用于传输层

web应用:

架构: b/s架构

协议: Http协议

作用于应用层

ps:

字符串转字节: bytes('字符串', encoding='utf-8')

字节转字符串: str(字节, encoding='utf-8')

自定义一个web框架

目标: 将自定制的server变成一个动态的server

Http协议:
请求头:
GET / HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,im age/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
请求体: 就是具体的内容
响应头:
http/1.1 200 OK
响应体: 用户看到的内容
def f1():
return bytes('xxxx',encoding='utf-8')

def f2():
   return bytes('oooo',encoding='utf-8')

def f3():
return tytes('aaaa',encoding='utf-8')
# 路由系统, 作用: 将客户端请求的url映射到相对应的函数, 最后直接执行即可
routes = [
  ('/xxx',f1),
  ('/ooo',f2),
  ('/aaa',f3),
]

def run():
import socket
   sock = socket.socket()
   sock.bind(('127.0.0.1',8080))
   sock.listen(5)
   
   while True:
       conn, addr = sock.accept()
       data = conn.recv(8090)
       # 转换成字符串类型
       data_str = str(data,encoding='utf-8')
       
       header_list = data_str.split('\r\n\r\n')
       headers = header_list[0]
       url = headers.split('\r\n')[0].split(' ')[1]
       
       func_name = None
       for items in routes:
           if items[0] == url:
               func_name = items[1]
               break
               
           if func_name:
               res = func_name()
           else:
               res - bytes('404 not found',encoding='utf-8')
               
           conn.send(bytes('http/1.1 200 OK\r\n\r\n',encoding='utf-8'))
           conn.send(res)
           conn.close()

自己写web框架:

  1. 自己写socket服务端

  2. 路由系统:

    1. url -----> 函数

  3. 模板引擎渲染:

    1. 自己定义的规则

    2. 使用第三方的工具(jinja2)

web框架的分类:

第一种维度分类:

  1. a, b, c ---> tornado

  2. a(引入第三方), b, c ---> Django (wsgiref/uwsgi)

  3. a(引入第三方), b, c(引入第三方) ---> flask

第二种维度分类:

1. Django
  1. 其它

Django的安装和启动

django的安装:
    1. pip install django==1.11.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. pytcharm安装

djangou的创建:
  1. django_admin startproject xxx

  2. pycharm创建

django目录结构:

s9day54:
s9day54:
settings.py: 配置文件
urls.py: 路由映射关系
wsgi.py : socket服务端文件
manage.py: 管理文件

启动django服务:pycharm启动

django的路由介绍

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

urlpatterns - [
   url(r'^admin/',admin.site.urls),
   url(r'^index/',index),
]

def index(request):
   return HttpResponse('index')

django的模板介绍

# 模板渲染函数:
def f1(request):
   return render(request,'f1.html')
# 变量替换
name = 'zekai'
render(request, 'f1.html',{'name':name})
# html页面:
<h2>{{ xxx }}</h2>

创建django项目的时候, 需要做的几个操作:

# 在settings.py中,配置以下几点
# 1. static目录需要自己创建, os.path.join(BASE_DIR,'static'), 最后这个逗号不能少
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'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')]

 

 

 

posted @ 2019-08-07 21:15  丨牧羊人  阅读(239)  评论(0编辑  收藏  举报