web框架
Posted qianxiamo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web框架相关的知识,希望对你有一定的参考价值。
1.web框架的本质
在web浏览中, 浏览器相当于客户端, 对web的操作相当于编写服务器
最基本的web服务器代码为
import socket
server=socket.socket()
server.bind((‘127.0.0.1‘,8080))
server.listen(5)
while True:
conn,addr=server.accept()
data=conn.recv(1024)
conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘))
conn.send(‘hello world‘.encode(‘utf8‘))
conn.close()
解析HTTP的请求报文
请求头和请求体用\r\n\r\n分割
请求头中的每一行用\r\n分割
2.基本框架的改进
(1)限制URL
通过分析请求头,获得请求头的URL,用URL来返回不同的数据
import socket
server=socket.socket()
server.bind((‘127.0.0.1‘,8080))
server.listen(5)
while True:
conn,addr=server.accept()
data=conn.recv(1024).decode(‘utf8‘)
header,bodys=data.split(‘\r\n\r\n‘)
##请求头与请求体用\r\n\r\n分割
headerlist=header.split(‘\r\n‘)
##请求头以\r\n分割
method,url,protocal=headerlist[0].split(‘ ‘)
##获取请求头的首行
conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘))
if url==‘/index‘:
conn.send(‘main page‘.encode(‘utf8‘))
##限制URL
else:
conn.send(‘404‘.encode(‘utf8‘))
(2)将URL封装
import socket
server=socket.socket()
server.bind((‘127.0.0.1‘,8080))
server.listen(5)
def f1():
conn.send(‘main page‘.encode(‘utf8‘))
def f2():
conn.send(‘hello world‘.encode(‘utf8‘))
routers=[
(‘/index‘,f1),
(‘/hi‘,f2)
]
while True:
conn,addr=server.accept()
data=conn.recv(1024).decode(‘utf8‘)
header,bodys = data.split(‘\r\n\r\n‘)
headerlist = header.split(‘\r\n‘)
method, url, protocal = headerlist[0].split(‘ ‘)
conn.send(‘HTTP1.1/1.1 200 OK \r\n\r\n‘.encode(‘utf8‘))
func_name=None
for item in routers:
if item[0]==url:
func_name=item[1]##限制URL,对应字典中的value,触发函数的执行
break
if func_name:
func_name()
else:
conn.send(‘404‘.encode(‘utf8‘))
conn.close()
(3)通过读取文件返回html页面
def f3():
with open(‘login.html‘,‘rb‘)as f:
conn.send(f.read())
routers=[
(‘/index‘,f1),
(‘/hi‘,f2),
(‘/wapper‘,f3)
]
(4)通过替换特殊字符串来动态返回HTML页面
def f4():
with open(‘login.html‘,‘rb‘)as f:
data=f.read()
import time
ctime=time.time()
data=data.replace(b‘@@@[email protected]@@‘,b‘ctime‘)
conn.send(data)
routers=[
(‘/index‘,f1),
(‘/hi‘,f2),
(‘/wapper‘,f3),
(‘/time‘,f4)
]
(5)读取数据库的表,获得数据库的数据并显示
(6)使用jinjia2来替换动态内容
3.框架的分类
4.Django框架
4.1创建基本Django项目
(1)安装
pip3 install django
添加环境变量
一般安装到Python的scripts的文件夹下
将scripts文件夹添加到环境变量
C:\Python36\Scripts\django-admin
创建一个项目
django-admin startproject 项目名
进入该项目目录中
python manage.py runserver IP地址:端口
如果不带上IP地址和端口, 默认是本地地址, 端口为8000
4.2用IDE创建Django项目
项目结构相同
│ db.sqlite3
│ manage.py 项目启动管理PY文件
│
└─项目名
│ settings.py 项目配置文件
│ urls.py 路由配置
│ wsgi.py
│ __init__.py
│
└─__pycache__
(1)配置URL urls.py
urlpatterns = [
# url(r‘^admin/‘, admin.site.urls),
url(r‘^login/‘, login),##后面一定要加逗号!!
]
(2)配置处理 函数urls.py
from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import HttpResponse,render,redirect
def login(request):#处理用户请求 并且返回结果
#至少有一个参数
# request 用户请求相关的所有信息(对象)
# return HttpResponse(‘login‘) #HttpResponse里面只能加字符串
# 返回用户所需要的信息
# return HttpResponse(‘<input>‘)#也可以返回一个标签,或者文件
if request.method=="GET":
return render(request,‘login.html‘)
else:
print(request.POST)#用户名密码字典都放在POST里面
#获取
u=request.POST.get("username")
p=request.POST.get("password")
if u=="root" and p=="123123":
return redirect(‘http://www.oldboyedu.com/‘)##跳转地址
#登录成功
else:
return render(request,‘login.html‘,{‘msg‘:‘用户名或密码错误‘})
#登录失败
#render默认自动查找模板路径下的login.html文件
#读取内容并返回给用户
(3)使用render的模板文件配置settings.py
‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)]
一般地, 模板文件放在templates文件中, 配置这个之后就能找到该文件了
(4)配置静态文件目录 settings.py
<link rel="stylesheet" href="/static/com.css">
--STATIC_URL = ‘/static/‘
STATICFILES_DIRS=(
os.path.join(BASE_DIR,‘sta‘),
)
以上是关于web框架的主要内容,如果未能解决你的问题,请参考以下文章