Django
web应用的本质
socket网络编程:
架构:C/S架构
协议:TCP/UDP协议
传输层
web应用:
架构:B/S架构
协议:Http协议
应用层
#字符串转字节:bytes('hfihajfaiuu',encoding='utf-8')
#字节转字符串:str(res,encoding='utf-8')
Http协议:
1请求头: 2GET / HTTP/1.1 3Host: 127.0.0.1:8080 4Connection: keep-alive 5Cache-Control: max-age=0 6Upgrade-Insecure-Requests: 1 7User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 8Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 9Accept-Encoding: gzip, deflate, br 10Accept-Language: zh-CN,zh;q=0.9 11 12请求体: 13dsjahbdjsahjdsa 14 15 16响应头: 17HTTP/1.1 200 OK 18 19响应体: 20"hello world" 21用户看到的内容 22 23 24改造之后, 动态的server: 25def f1(): 26return bytes('xxxx', encoding='utf-8') 27 28def f2(): 29return bytes('oooo', encoding='utf-8') 30 31def f3(): 32return bytes('aaaa', encoding='utf-8')
路由系统
作用:将客户端请求的url映射到相应的函数,最后执行该函数即可
1routes = [ 2 ('/xxx', f1), 3 ('/ooo', f2), 4 ('/aaa', f3), 5 ] 6 7def run(): 8import socket 9sock = socket.socket() 10sock.bind(('127.0.0.1', 8080)) 11sock.listen(5) 12 13while True: 14conn, addr = sock.accept() 15data = conn.recv(8090) 16# print(data) 17### 转成字符串类型 18data_str = str(data, encoding='utf-8') 19 20header_list = data_str.split('\r\n\r\n') 21headers = header_list[0] 22url = headers.split('\r\n')[0].split(' ')[1] 23 24### 判断url 25# if url == '/xxx': 26# res = bytes('xxxx', encoding='utf-8') 27# elif url == '/ooo': 28# res = bytes('oooo', encoding='utf-8') 29# else: 30# res = bytes('404 not found', encoding='utf-8') 31func_name = None 32for items in routes: 33if items[0] == url: 34func_name = items[1] 35break 36if func_name: 37res = func_name() 38else: 39res = bytes('404 not found', encoding='utf-8') 40 41conn.send(bytes("HTTP/1.1 200 OK\r\n\r\n",encoding='utf-8')) 42conn.send(res) 43conn.close()
自己写web框架
1.自己写socket服务端
2.路由系统:
url ===> 函数
3.模板引擎渲染
1)自己定义的规则
2)使用第三方工具 (jinja2)
web框架的分类
第一维度分类:
1.1、2、3 ---> tornado
2.1(引入第三方)、2、3 ---> django (wsgiref/uwsgi)
3.1(引入第三方)、2、3(引入第三方) ---> flask
第二维度分类:
1.django
1- orm 2- session 3- form表单验证 4- 。。。
2.其他
django的安装和启动
1.django的安装: a. pip3 install django==1.11.22 -i https://pypi.tuna.tsinghua.edu.cn/simple
b. pycharm安装
2.django的创建: a. django-admin startproject xxx
b. pycharm创建
3.django目录结构:
s9day54: s9day54: settings.py: 配置文件 urls.py: 路由映射关系 wsgi.py : socket服务端文件 manage.py: 管理文件
4.启动django服务: pycharm启动
django的路由介绍
添加路由和函数的对应关系:
urlpatterns = [ #url(r'^admin/', admin.site.urls), url(r'^index/', index), ]
def index(request):
return HttpResponse('index')
django的模板介绍
1.模板渲染函数: def f1(request): return render(request, 'f1.html')
2.变量替换: name = 'zekai'
render(request, 'f1.html', {"name":name})
html页面:
<h2>{{ xxx }}</h2>
3.以后再去创建django项目的时候, 需要做的几个操作: 到settings.py中, 配置:
-
STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), ) 逗号不能少 static目录需要创建
-
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', ]
-
'DIRS': [os.path.join(BASE_DIR, 'templates')]
-
django的连接数据库操作
a.pymysql连接 b.django的orm连接