[TOC]html
import socket server = socket.socket() server.bind(('127.0.0.1', 8080)) server.listen(5) spe_conn, address = server.accept() # 阻塞态 data = spe_conn.recv(1024) data_str = data.decode('utf8') current_path = data_str.split('\r\n')[0].split(' ')[1] spe_conn.send(b'HTTP/1.1 200 ok\r\n\r\n') if current_path == '/index': with open(r'手写web前端页面.html', 'rb') as fr: spe_conn.send(fr.read()) elif current_path == '/login': spe_conn.send(b'login') else: spe_conn.send(b'404 error') spe_conn.close()
存放函数, 这些函数被称为视图函数, 视图层前端
存放路由后缀与视图函数的对应关系, 路由层python
存放html模板文件mysql
def get_user_dic(env): from jinja2 import Template user_dic = {'user_name': 'jason', 'hobby': ['read', 'book', 'run']} with open(r'templates/get_user_dic.html', 'r', encoding='utf8') as fr: data = fr.read() # 在内存中读取HTML模板 temp = Template(data) # 获得temp对象 res = temp.render(userDic=user_dic) # 根据HTML模板中的模板语法, 将user_dic渲染到HTML模板中, 在内存中生成一个完整的HTML文件(即res) # print(res) return res ''' res对应整个html页面在内存中渲染后的结果 模板语法部分对应结果: <p>{'user_name': 'jason', 'hobby': ['read', 'book', 'run']}</p> <p>jason</p> <p>['read', 'book', 'run']</p> <p>read</p> <p>book</p> <p>run</p> '''
<!--模板语法--> <p>{{userDic}}</p> <p>{{userDic.user_name}}</p> <p>{{userDic['hobby']}}</p> <p>{{userDic.get('hobby').0}}</p> <p>{{userDic.get('hobby').1}}</p> <p>{{userDic.get('hobby').2}}</p>
pymysql.connect-->Connect-->__init__
web
模板的渲染: 将后端处理好的数据, 在内存中读取HTML模板, 并经过jinjia2模板语法生成一个完整的HTML文件的过程sql
模板的渲染是在后端完成的, 与前端无关数据库
pymsql复习django
import pymysql client = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='Cql123456', db='django', charset='utf8', autocommit=True ) cursor = client.cursor(pymysql.cursors.DictCursor) # 将查询出的数据组织成一个字典 sql = "select id, username, password from user_info" # 当数据量特别大时, *会下降查询效率 affect_rows = cursor.execute(sql) # sql注入: 利用mysql注释语法钻漏洞, 关键数据交给execute拼接 user_lt = cursor.fetchall()
django:flask
flask:后端
tornado:
建立django项目: django-admin startproject 项目名
启动django项目: manage.py runserver127.0.0.1:8080
app: django是一个以开放app为主要功能的web框架
一个django项目相似于一所大学, 而app相似于大学里的学院
能够根据功能的不一样开放多个app, 一个app对应一个具体的功能模块
建立app: python manage.py startapp app名
不会自动建立templates文件夹, 建立后手动将templates文件夹路径添加到settings.py中
settings-->TEMPLATES-->'DIRS': [os.path.join(BASE_DIR, 'templates')]
1.建立的app须要在django配置文件中注册才能生效: 'INSTALLED_APPS = [..., app02.apps.App02Config']
经过反射找到所建立的app
2.必定要确保同一个端口同一时间只能启一个django项目
3.更改使用的数据库, settings-->DATABASES
django项目名
HttpResponse: 返回字符串
def index(request): # 参数request <==> env, 必须传 return HttpResponse('一脸懵逼')
render: 返回HTML文件, 能够给HTML文件传值
def login(request): user_dic = {'username': 'jason', 'password': '123'} return render(request, 'login.html', {'userDic': user_dic})
redirect: 重定向, 1. 直接写本网站的路径后缀; 2. 写其余网站全路径
def home(request): return redirect('/login') # return redirect('https://www.baidu.com')
重启机制: 内有检测机制, 实时检测全部文件的变化, 有时会产生代码还没写完就自动重启报错的状况, 不用管