web应用简介
Django框架是一个专门用来开发web项目的框架
1.web应用程序是什么
web应用程序是一种可以通过web访问的应用程序,也就是说只需要一个浏览器即可,不需要其他软件
2.应用程序又两种模式c/s、b/s
Django就是开发b/s程序的,所依,我们就认为浏览器是客户端,Django框架就是服务端
3.web应用程序的优点
1.只需要一个浏览器即可
2.节省资源空间
3.不需要跟新,服务端更新,客户端也会更新
4.可以跨平台使用
4.web应用缺点
一旦web服务端宕机,直接影响客户端正常运行
什么是web框架:框架的意思就是别人提前写好的,我们只需要按照人家的要求在固定的位置写固定的代码
自己写一个web框架(推到框架的演变、代码无需掌握、重点看思路)
web应用程序主要就是B/S架构的,浏览器就是客户端、我们现在开发出一个服务端出来即可
http协议相关知识点
1. 四大特性
基于请求和响应
基于TCP协议之上的应用层协议
无状态
短连接
2. 请求数据格式
请求首行(请求方式、协议版本号)
请求头
\r\n
请求体
3. 响应数据格式
响应首行(响应状态码)
响应头
\r\n
响应体
4. 响应状态码
1xx
2xx
3xx
4xx
5xx
socket模块写出服务端
原始版服务端:用浏览器无法正常运作
import socket sever = socket.socket() sever.bind(('127.0.0.1', 8000)) sever.listen(5) while True: sock, addr = sever.accept() data = sock.recv(1024) print(data.decode())
sock.send(data) sock.close()
第一次改进:客户端接受服务端发来的消息
import socket sever = socket.socket() sever.bind(('127.0.0.1', 8000)) sever.listen(5) while True: sock, addr = sever.accept() data = sock.recv(1024) print(data.decode()) sock.send(b‘HTTP/1.1 200 ok \r\n\r\n ’)# 符合浏览器http协议格式,运用的tcp协议的流式协议 sock.send(data) sock.close()
第二次改进:在浏览器地址栏中写什么后缀就返回什么内容
思路:
1. 在后端肯定是要知道你在浏览器输入了什么后缀
2. 判断是什么后缀就返回什么内容
import socket sever = socket.socket() sever.bind(('127.0.0.1', 8001)) sever.listen(5) while True: sock, addr = sever.accept() data = sock.recv(1024) sock.send(b'HTTP / 1.1 200 ok \r\n\r\n') print(data.decode('utf8')) # 把字节类型转为字符串 data_str = data.decode('utf8') # 进行空格切分把字符串转为列表显示 data_list = data_str.split(' ') # 索引取出后缀名 name_extension = data_list[1] # 做判断 if name_extension == '/index': sock.send(b'index') elif name_extension == '/login': sock.send(b'login') else: sock.send(b'404 error') sock.close()
存在一些问题:
1. socket部分我们每次都要书写(要写重复代码)
2. 我们需要自己来处理HTTP格式的数据,自己做切分,自己来取值等比较麻烦
3. 并发问题没有解决
如何解决这些问题:借助于wsgiref模块
借助于wsgiref模块(内置模块)
解决了socket部分不用我们写,程序员已经写好放在wsgiref模块中
它解决了并发问题 WSGIServer类------>wsgiref------>它能够解决的并发量不高----->本地使用wsgiref服务器--------------->代码上线之后,就不是由它----------->uwsgi服务器(它支持的并发量更高)
def run(env, response): """ :param env: 客户端每次发起请求的时候,所携带的数据都在这个里面,就类似属于是request :param response: 是后端给浏览器返回的数据 :return: 返回给浏览器查看的 """ print(env) # 把HTTP格式的数据都封装到了大字典里去了 response("200 OK", []) # 我们取到当前的后缀内容 current_path = env.get('PATH_INFO') # 做判断 if current_path == '/index': return [b'index'] elif current_path == '/login': return [b'login'] else: return [b'404 error'] if __name__ == '__main__': server = make_server(host='127.0.0.1', port=8000, app=run) """ 这句话写完就会实时监听127.0.0.1:8000这个地址 只要有客户端来访问这个地址,那么,我服务端就能够接收到客户端的请求, 就类似于是我们的socket端 app=run:只要有客户度发过去请求,那么就会把处理的请求交给run这个函数来处理,run是个函数名(在django中用的就是函数名) 后面你要学的flask框架这个地方写的是对象,而不是函数名 obj()-------------->会触发类的__call__方法--------->flask框架的启动代码就在__call__里面写着的,是入口 """ # 启动服务端 server.serve_forever()
views.py----------------->视图文件--------->主要就是写后端的逻辑的
urls.py------------------>路由文件(后缀)---------->路由与视图函数的对应关系
templates---------------->专门用来存储html文件的
ps:以后我们要想增加一个后缀,只需要在urls.py中写一个路由和在views.py中写一个视图函数即可.
Django框架的学习
Django是Python中使用最多的一个主流框架!
Python中的主流框架
Django:
主要用来开发web项目的,它比较笨重,一般小型项目不怎么使用它,大而全
flask:
它是一个比较轻量级的框架,它主要依赖于第三方的模块,不断的安装第三方模块,小而精
tornado:
异步非阻塞,解决高并发比较擅长
版本问题:
1.X(老项目) 2.X(新项目) 3.X(新版本)
1.x和2.x本质上差别不是很大,但是也有区别,我们讲1.x,附带讲2.x的区别
在drf中,都要使用2.x以上版本,drf这个框架要求django的版本必须是2.x以上
注意事项:
1. 你的项目名称和应用名称以及其他文件的名称都要使用英文的,坚决不能够使用中文的
2. 你的计算机名称最后都使用英文的
3. 一个pycharm窗口只打开一个django项目,不能够一个窗口打开很多个django项目
如何使用Django
1. 安装django
pip install django==1.11
django版本要和解释器的版本要匹配:
django2.X版本------------>解释器的版本最后3.6以上
如何验证django是否安装成功
在cmd中输入:django-admin------>如果有输出内容就说明安装成功
2.创建项目
1 命令行创建
你可以先切换路径,切换到你想把django项目放到的路径里
django-admin startpeoject 项目名
django-admin startproject myfirst_dj
2 pycharm创建
File----->New Project ----->django
3. 如何启动项目
1. 命令行启动
先把路径切到manage.py所在的路径
python3 manage.py runserver
项目启动起来之后,会监听:http://127.0.0.1:8000/
默认端口号是:8000
如何修改端口号:
python3 manage.py runserver 127.0.0.1 8001
2. pycharm启动
点击绿色按钮
访问项目: http://127.0.0.1:8000/
4. Next, start your first app by running python manage.py startapp [app_label].
如何创建应用
1. 命令行创建
python manage.py startapp [app_label].
python manage.py startapp app01.
2. pycharm创建
当你把应用创建出来之后,紧接着要做的一件事情就是:注册应用
在配置文件中注册应用,这个应用才生效
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01.apps.App01Config', # 全称 'app01', # 简称 ]
主要文件介绍
myfirst_dj # 项目名称 app01 # 应用名称 migrations # 这个是用来存储数据库迁移记录 __init__.py admin.py # 跟后台项目注册等相关的 apps.py # 跟一些注册相关 models.py # 跟数据库打交道的 模型层----->MTV模型 tests.py # 测试文件 views.py # 视图文件,写一些后端逻辑 myfirst_dj __init__.py settings.py # 配置文件相关的 urls.py # 路由相关的 wsgi.py # 内部封装的wsgiref服务器,uwsgi服务器之后,这个文件就没用了uwsgi.py db.sqlite3 # Django自带的小型数据库 manage.py # Django框架的入口文件
应用
django主要开发的就是一款web应用!
Django框架类似于是一所大学(空壳子)
应用就是大学里面的二级学院(具备独立的功能模块)
一个应用就是一个独立的功能模块
比如:
user
order
address
cart
应用名一定要见名知意,但是我们教学为了方便,我都使用app01、02、03...
三板斧
The view app01.views.index didn't return an HttpResponse object. It returned None instead. return HttpResponse("OK") # 返回字符串的 return render(request, 'index.html') # 返回html文件的 return redirect('http://www.baidu.com') # 重定向 #自己创建的templates文件夹,要在配置文件注册 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
自己创建的templates文件夹,要在配置文件注册
标签:web,socket,基础,py,sock,介绍,django,Django,data From: https://www.cnblogs.com/shanghaipudong/p/17583486.html