一、Django
web 框架本质
所有的web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。
我们访问网址收到的响应信息可以在浏览器调试窗口的network标签中看到
点击view source之后显示如下图:
收发消息格式要求
"""
根据浏览器访问的路径的不同,返回不同的内容
将不同页面的处理代码封装到函数中
优化频繁的if判断
返回具体的HTML文件
实现不同的用户得到不同的HTML页面
"""
from wsgiref.simple_server import make_server
from jinja2 import Template
import pymsql
def home(url):
s='this is {}page!'.format(url)
return bytes(s,encoding='utf8')
def index(url):
return b'<h1>index page</h1>'
def user(url):
#从数据库里面找到所有用户信息
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='user',
charset='utf8')
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select*from user')
ret=cursor.fetchall()
print(ret)
with open('user.html','r',encoding='utf8')as f:
data_s=f.read()
template=Template(data_s)
msg=template.render({"user_list":ret})
return bytes(msg,encoding='utf8')
def login(url):
with open('login.html','rb') as f:
return f.read()
url和将要执行的函数的对应关系
url2func=[
("/index",index),
("/home/",home),
("/user/",user),
("/login/",login),
]
按照wsgiref的要求定义一个run_server函数
def run_server(environ,start_response):
'''
:param environ:跟请求相关的参数
:param start_response:
:return:
'''
#设置HTTP响应的状态码和头信息
start_response('200 OK',[('Content-Type','text/html;charset=utf8'),])
url=environ['PATH_INFO']#取到用户输入的url
func=None
for i in url2func:
if url==i[0]:
func=i[1]
break
else:
func=None
if func:
msg=func(url)#执行对应的函数
else:
msg=b'<h1>404</h1>'
return [msg,]
if _name_=='_main_':
httpd=make_server('127.0.0.1',8090,run_server)
http.server_forever()
二、Django
要下载带LTS版的可以长期处理BUG
pip3 install django==1.11
创建一个django项目:
django-admin startproject mysite
mysite/
├── manage.py # 管理文件
└── mysite # 项目目录
├── __init__.py
├── settings.py # 配置
├── urls.py # 路由 --> URL和函数的对应关系
└── wsgi.py # runserver命令就使用wsgiref模块做简单的web server
运行Django项目
python manage.py runserver 127.0.0.1:8000
模板文件配置:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "template")], # template文件夹位置
'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',
],
}
静态文件配置
STATIC_URL = '/static/' # HTML中使用的静态文件夹前缀 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), # 静态文件存放位置 ]
Django基础必备三件套:
HttpResponse
内部传入一个字符串参数,返回给浏览器
def index(request):
#业务逻辑代码
return HttpResponse("OK")
render
除request参数外还接受一个待渲染的模板文件和一个保存具体数据的字典参数。
将数据填充进模板文件,最后把结果返回给浏览器。
def index(request):
#业务逻辑代码
return render(request,'index.html',())