2.请求方式都有哪几种?
import socket
server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)
while True:
sock, addr = server.accept()
data = sock.recv(1024)
sock.send(b'HTTP/1.1 200 OK \r\n\r\n')
target_url = data.decode('utf8').split(' ')[1]
print(target_url) # / /index /register
if target_url == '/index':
sock.send(b'index')
elif target_url == '/register':
sock.send(b'register')
else:
sock.send(b'404 error')
推导django框架的产生过程
启动文件
from wsgiref.simple_server import make_server
from urls import urls
from views import *
def run(request, response):
"""
:param request: 请求数据
:param response: 响应数据
:return: 返回给客户端的数据
"""
response('200 OK', []) # 固定代码
target_path = request.get('PATH_INFO')
func_name = None
for url_tuple in urls:
if url_tuple[0] == target_path:
func_name = url_tuple[1]
break #
if func_name:
res = func_name(request)
else:
res = error(request)
return [res.encode('utf8')]
if __name__ == '__main__':
server = make_server('127.0.0.1', 8080, run)
server.serve_forever() # 永久启动
from views import *
urls = (
('/home', home),
('/index', index),
('/login', login),
('/register', register),
)
def index(request):
return 'index'
def login(request):
return 'login'
def register(request):
return 'register'
1.功能:jinja2能够让我们在html文件内使用类似于后端的语法来操作各种数据类型
from jinja2 import Template
def get_dict(request):
user_dict = {'name': 'jason', 'pwd': 123, 'hobby': ['read', 'run', 'music']}
with open(r'templates/myhtml04.html','r',encoding='utf8') as f:
data = f.read()
temp = Template(data)
res = temp.render(data=user_dict)
return res
1.动态网页:页面上的数据是从后端传入的
2.静态网页:页面上的数据是固定写好的,要修改只能修改源码
<h1>{{ data }}</h1>
<h1>{{ data['name'] }}</h1>
<h1>{{ data.get('pwd') }}</h1>
<h1>{{ data.hobby }}</h1>
{% for user in user_data %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.age }}</td>
</tr>
{% endfor %}
大而全 自身携带的功能非常的多 类似于航空母舰
缺陷:开发小项目的时候使用该框架有点笨重(大材小用)
小而精 自身携带的功能非常的少 类似于特种兵 主要依赖于第三方模块
缺陷:受限于第三方模块的开发
异步非阻塞 该框架快到可以作为游戏服务器
缺陷:上手难度是三者最高的
最近流行的
1.创建django项目:django-admin startproject 项目名称
2.启动django项目:
def index(request):
return HttpResponse('这是一个视图函数')
def index(request):
return render(request, 'index.html')
def index(request):
return redirect('https://www.baidu.com')
路由层
urlpatterns = [
path('show_info/', views.show_info),
]
视图层
from jinja2 import Template
import pymysql
def show_info(request):
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='888',
database='dj01',
charset='utf8',
autocommit=True
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from userinfo'
cursor.execute(sql)
user_data = cursor.fetchall()
with open(r'templates/1.html', 'r', encoding='utf8') as f:
data = f.read()
temp = Template(data)
res = temp.render(user_data=user_data)
return HttpResponse(res)
html文件
<div class="container">
<div class="row">
<h1 class="text-center">数据展示</h1>
<div class="col-md-8 col-md-offset-2">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>主键</th>
<th>姓名</th>
<th>年龄</th>
<th>爱好</th>
</tr>
</thead>
<tbody>
{% for user in user_data %}
<tr>
<td>{{user.id}}</td>
<td>{{user.name}}</td>
<td>{{user.age}}</td>
<td>{{user.hobby}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
结果
