day51_9_15_Django
一。pycharm接受网页信息原理。 如何实现在后端接受浏览器的数据,并解析出有用的信息呢? 使用socket编写网络连接,然后通过浏览器访问ip+端口号。 import socket def index(): with open(‘D:pythontext9_15index.html‘,‘r‘) as f: date = f.read() return date def dee(): return ‘dee‘ dict1 = {‘/index‘:index,‘/dee‘:dee} server = socket.socket() server.bind((‘127.0.0.1‘,8080)) server.listen(5) while True: conn,addr = server.accept() date = conn.recv(1024) print(date) date = date.decode() date = date.split(‘ ‘) print(date) if date[1] in dict1: send2 = dict1.get(date[1])() else: send2 = ‘_‘ conn.send(b‘HTTP/1.1 200 OKrnrn‘) conn.send(send2.encode()) 打印代码可以看到返回信息: b‘GET /index HTTP/1.1rn · 通过切割的方法获取到get后面的路由,再由语句判断执行相应的返回函数,再返回该值的二进制。 补充: 在二进制和字符之间转化时,除了使用函数: encode() decode? () 之外,还可以使用以下形式: data = str(data,encoding=‘utf-8‘) data = bytes(data,encoding=‘utf-8‘) 二。wsgiref模块的使用。 wsgiref模块讲网页传入的socket过程封装,将数据的发送与接受封装,程序员只要编写路由和视图的对应关系,执行相应的函数即可。
? ? ? 其中urls存放的就是路由和视图的对应关系,而wsgiref1存放的是运行代码。views存放的是视图函数。 wsgiref的启动函数: if __name__ == ‘__main__‘: server = make_server(‘127.0.0.1‘,8080,run) server.serve_forever() 其中make_server将ip+host接受,然后运行run函数。 run中会被传入两个参数:env和response。 env包括网页的一些重要信息其中包括路由:PATH_INFO,使用的存储方式就是字典。 run从字典中解析出PATH_INFO就可以写入urls,执行相应的函数。 response的函数方法: response(‘200 OK‘,[]) 总代码: from wsgiref.simple_server import make_server def run(env,response): print(env) response(‘200 OK‘,[]) curruct_path = env.get(‘PATH_INFO‘) func = None for url in urls: if url[0] == curruct_path: func = url[1] break if func: res = func(env) else: res = error(env) return [res.encode()] env中的kv键: {‘ALLUSERSPROFILE‘: ‘C:ProgramData‘,‘APPDATA‘: ‘C:UsersxinAppDataRoaming‘,‘COMMONPROGRAMFILES‘: ‘C:Program FilesCommon Files‘,‘COMMONPROGRAMFILES(X86)‘: ‘C:Program Files (x86)Common Files‘,‘COMMONPROGRAMW6432‘: ‘C:Program FilesCommon Files‘,‘COMPUTERNAME‘: ‘DESKTOP-V7OFSTO‘,‘COMSPEC‘: ‘C:Windowssystem32cmd.exe‘,‘DRIVERDATA‘: ‘C:WindowsSystem32DriversDriverData‘,‘FPS_BROWSER_APP_PROFILE_STRING‘: ‘Internet Explorer‘,‘FPS_BROWSER_USER_PROFILE_STRING‘: ‘Default‘,‘HOMEDRIVE‘: ‘C:‘,‘HOMEPATH‘: ‘Usersxin‘,‘LOCALAPPDATA‘: ‘C:UsersxinAppDataLocal‘,‘LOGONSERVER‘: ‘\DESKTOP-V7OFSTO‘,‘NUMBER_OF_PROCESSORS‘: ‘4‘,‘ONEDRIVE‘: ‘C:UsersxinOneDrive‘,‘ONEDRIVECONSUMER‘: ‘C:UsersxinOneDrive‘,‘OS‘: ‘Windows_NT‘,‘PATH‘: ‘D:python3.6Scripts;D:python3.6Scripts;D:python3.6;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;F:DAL;C:Program FilesIntelIntel(R) Management Engine ComponentsDAL;D:python2.7Scripts;D:python2.7;D:mysqlmysql-5.6.45-winx64bin;C:UsersxinAppDataLocalMicrosoftWindowsApps;‘,‘PATHEXT‘: ‘.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW‘,‘PROCESSOR_ARCHITECTURE‘: ‘AMD64‘,‘PROCESSOR_IDENTIFIER‘: ‘Intel64 Family 6 Model 61 Stepping 4,GenuineIntel‘,‘PROCESSOR_LEVEL‘: ‘6‘,‘PROCESSOR_REVISION‘: ‘3d04‘,‘PROGRAMDATA‘: ‘C:ProgramData‘,‘PROGRAMFILES‘: ‘C:Program Files‘,‘PROGRAMFILES(X86)‘: ‘C:Program Files (x86)‘,‘PROGRAMW6432‘: ‘C:Program Files‘,‘PSMODULEPATH‘: ‘C:Program FilesWindowsPowerShellModules;C:Windowssystem32WindowsPowerShellv1.0Modules‘,‘PUBLIC‘: ‘C:UsersPublic‘,‘PYCHARM_HOSTED‘: ‘1‘,‘PYCHARM_MATPLOTLIB_PORT‘: ‘51431‘,‘PYTHONIOENCODING‘: ‘UTF-8‘,‘PYTHONPATH‘: ‘D:python编译器PyCharm 2018.1.4helperspycharm_matplotlib_backend;D:pythontext9_15‘,‘PYTHONUNBUFFERED‘: ‘1‘,‘SESSIONNAME‘: ‘Console‘,‘SYSTEMDRIVE‘: ‘C:‘,‘SYSTEMROOT‘: ‘C:Windows‘,‘TEMP‘: ‘C:UsersxinAppDataLocalTemp‘,‘TMP‘: ‘C:UsersxinAppDataLocalTemp‘,‘USERDOMAIN‘: ‘DESKTOP-V7OFSTO‘,‘USERDOMAIN_ROAMINGPROFILE‘: ‘DESKTOP-V7OFSTO‘,‘USERNAME‘: ‘xin‘,‘USERPROFILE‘: ‘C:Usersxin‘,‘WINDIR‘: ‘C:Windows‘,‘SERVER_NAME‘: ‘DESKTOP-V7OFSTO‘,‘GATEWAY_INTERFACE‘: ‘CGI/1.1‘,‘SERVER_PORT‘: ‘8080‘,‘REMOTE_HOST‘: ‘‘,‘CONTENT_LENGTH‘: ‘‘,‘SCRIPT_NAME‘: ‘‘,‘SERVER_PROTOCOL‘: ‘HTTP/1.1‘,‘SERVER_SOFTWARE‘: ‘WSGIServer/0.2‘,‘REQUEST_METHOD‘: ‘GET‘,‘PATH_INFO‘: ‘/index‘,‘QUERY_STRING‘: ‘‘,‘REMOTE_ADDR‘: ‘127.0.0.1‘,‘CONTENT_TYPE‘: ‘text/plain‘,‘HTTP_HOST‘: ‘127.0.0.1:8080‘,‘HTTP_CONNECTION‘: ‘keep-alive‘,‘HTTP_CACHE_CONTROL‘: ‘max-age=0‘,‘HTTP_UPGRADE_INSECURE_REQUESTS‘: ‘1‘,‘HTTP_USER_AGENT‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/76.0.3809.132 Safari/537.36‘,‘HTTP_SEC_FETCH_MODE‘: ‘navigate‘,‘HTTP_SEC_FETCH_USER‘: ‘?1‘,‘HTTP_ACCEPT‘: ‘text/html,application/signed-exchange;v=b3‘,‘HTTP_SEC_FETCH_SITE‘: ‘none‘,‘HTTP_ACCEPT_ENCODING‘: ‘gzip,br‘,‘HTTP_ACCEPT_LANGUAGE‘: ‘zh-CN,en;q=0.8‘,‘wsgi.input‘: <_io.BufferedReader name=844>,‘wsgi.errors‘: <_io.TextIOWrapper name=‘<stderr>‘ mode=‘w‘ encoding=‘UTF-8‘>,‘wsgi.version‘: (1,0),‘wsgi.run_once‘: False,‘wsgi.url_scheme‘: ‘http‘,‘wsgi.multithread‘: True,‘wsgi.multiprocess‘: False,‘wsgi.file_wrapper‘: <class ‘wsgiref.util.FileWrapper‘>} 三。静态页面和动态页面 静态网页: 页面上的数据都是写死的,万年不变 动态网页: 页面上的数据是从后端动态获取的 比如后端获取当前时间 后端获取数据库数据然后传递给前端页面。 所以,模拟动态页面,需要先写一个页面,使用$$time字符占位时间,再通过函数替换字符为时间。 (传递页面==》页面渲染) 添加功能。如何将字典动态的添加到页面循环,并使用点方法取值。 四。jinja2的使用 下载jinja2:pip3 install jinja2 flask是依赖于jinja2,所以下载flask也可以下载jinja2。 jinja2可以将模板(html页面)中的后端数据进行处理,将字典变成拥有点方法和字典取值方法的数据,其语法如下: from jinja2 import Template def get_user(env): user_dic = {‘name‘:‘lzx‘,‘pwd‘:‘123‘} with open(r‘D:pythontext9_15templateuser.html‘,‘r‘) as f: date = f.read() temp = Template(date) res = temp.render(date = user_dic) return res 显示的页面如下 {{date}}} {{date.name}} {{date[‘name‘]}} {{date.get(‘name‘)}} jinja2动态展示数据库: import pymysql def get_db(env): conn = pymysql.connect( host=‘127.0.0.1‘,port=3306,charset=‘utf8‘,user=‘root‘,password=‘123456‘,database=‘test‘,autocommit=True ) cursor = conn.cursor( pymysql.cursors.DictCursor ) sql = ‘select * from user‘ with open(r‘D:pythontext9_15templateget_db.html‘,‘r‘) as f: date1 = f.read() date2 = cursor.execute(sql) date = cursor.fetchall() temp = Template(date1) res = temp.render(user_list=date) return res 模板: {% for user_dict in user_list%} <tr> <td>{{user_dict.id}}</td> <td>{{user_dict.name}}</td> <td>{{user_dict.pwd}}</td> </tr> {%endfor%} 如此得出web流程图: ? ? ? ?五。web框架。 python中有三大主流web框架 Django:大而全,自带了很多功能模块,类似于航空母舰 (缺点:有点笨重) Flask:短小精悍,自带的功能模块特别少,大部分都是依赖于第三方模块(小而轻) flask框架第三方发组件特别多,加起来可以抵过django Tornado:异步非阻塞 主要用在处理高io 多路复用的情况 可以写游戏后端 ? 速度快。 a:socket Django: 六。Django框架: 使用注意事项: 1.计算机的名称不能有中文 2.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面 3.项目名不能起中文 关于版本: 推荐使用1.11.11版本
创建django项目的方式方式1(命令行创建): 创建django项目 django-admin startproject 项目名 创建app应用 python3 manage.py startapp app01 启动django项目 python3 manage.py runserver ps:用命令行创建django默认不会自动创建templates文件夹 需要你手动自己创建(注意改文件夹路径是否被添加配置文件中) 方式2(pycharm创建) FILE >>> new project 选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理 创建app pycharm命令行创建 python3 manage.py startapp app01 Tools下面run manage task功能栏 启动点小绿色箭头 强调: 1.用django一定要保证只有一个在运行状态 切记切记!!!!!!! 2.一定记得清浏览器的缓存 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |