知识点:
1)除了import导入模块还可以用__init__调用函数的方法导入模块
2)用以下方式启动命令如何接收后面传的参数?
![](https://img.haomeiwen.com/i19251823/4f390e9147fd1775.png)
通过argv获取
![](https://img.haomeiwen.com/i19251823/624112659cff58f4.png)
一、mini-cw(CW-Charry)
![](https://img.haomeiwen.com/i19251823/d4f3c6f65d11b4dd.png)
mini-cw的文件分配:
1、dynamic(动态目录:动态的返回后台数据):写框架mini-frame.py
① 创建__init__文件为了兼容python2,dynamic变成一个包
2、templates:放模板(放以html结尾的目录)
3、static(静态目录):放css样式,img图片,fonts(字体),js等其他资源
解耦前后端分开 :
1、前端放在static和templates里
2、后端放在dynamic和web服务器里
3、前后端互不影响里
"./templates/charry.html"(一个点/):用python3运行web_server.py文件,所有用open打开的文件路径都从web_server.py的路径开始算---当前路径下(一个点/)
![](https://img.haomeiwen.com/i19251823/88b771e93b1cc803.png)
二、给程序传参
指定运行某一模块:
-- eg:自己设一个7788的端口——>运行mini_frame这个指定的模块里的application函数
eg:python web_server.py 7788 mini_frame:application
什么是给程序传参?
python+文件名+用7788绑定端口,用 mini_frame:application指定服务器加载某个框架里的某个函数去运行,这种写法叫给程序传参
以字符串形式传参:传任何数据都以字符串形式对待
![](https://img.haomeiwen.com/i19251823/9d6762c7694804b6.png)
![](https://img.haomeiwen.com/i19251823/cc59556c3bad1be2.png)
1)同时跑两个7890端口的程序,会导致端口占用,服务器废了,如何换端口?
![](https://img.haomeiwen.com/i19251823/f8dcb2a22688c7a9.png)
![](https://img.haomeiwen.com/i19251823/f51f02a79b6544e0.png)
![](https://img.haomeiwen.com/i19251823/87c4469ff58b3d6f.png)
![](https://img.haomeiwen.com/i19251823/8f96b2bce95ec610.png)
![](https://img.haomeiwen.com/i19251823/fa226054e2b55c6e.png)
![](https://img.haomeiwen.com/i19251823/d380ab974a8f8705.png)
![](https://img.haomeiwen.com/i19251823/46cb0fecbc6359b1.png)
2)如何在不修改服务器前提下,还可以支持其他框架?
init接收端口,绑定不能写死,改为port
http服务器做成通用的
好处:可以随意调用哪个模块下的哪个函数
![](https://img.haomeiwen.com/i19251823/46c78634caa6d3ef.png)
![](https://img.haomeiwen.com/i19251823/a5cdff09dce5d7c1.png)
那么就在运行时,把它指定,像以下
![](https://img.haomeiwen.com/i19251823/5b242a51d9e97a8f.png)
![](https://img.haomeiwen.com/i19251823/8e10e95f0b2e6b55.png)
![](https://img.haomeiwen.com/i19251823/8e4c8429d8982131.png)
然后得把它取出来
![](https://img.haomeiwen.com/i19251823/9cae78db0a9bd06a.png)
![](https://img.haomeiwen.com/i19251823/8b8d291ab04b6b52.png)
![](https://img.haomeiwen.com/i19251823/45328353823ff437.png)
![](https://img.haomeiwen.com/i19251823/830ebcdc9d731bed.png)
![](https://img.haomeiwen.com/i19251823/0cfcb73d7fa1e800.png)
![](https://img.haomeiwen.com/i19251823/c0abc958a68baeee.png)
![](https://img.haomeiwen.com/i19251823/2a736708874d317b.png)
![](https://img.haomeiwen.com/i19251823/30d00d7c8e56445a.png)
![](https://img.haomeiwen.com/i19251823/b841884aa4f93cba.png)
![](https://img.haomeiwen.com/i19251823/91e9c825c96d84a3.png)
明明使用以下只有一行方法更简单,为什么要使用上面的方法?
![](https://img.haomeiwen.com/i19251823/efa2de7ac2fbbb5b.png)
因为这样可以随便调某个模块下的某个函数,主要是为了解耦,但还是解耦不够彻底(有2处):
1. 服务器必须上这个目录下找静态资源,如果没有就废了
![](https://img.haomeiwen.com/i19251823/a776346a5a847b25.png)
2. 得上dynamic下找import导入的 mini_frame模块,如果换一个目录就不好使了
![](https://img.haomeiwen.com/i19251823/177d9d39a713d666.png)
如此,就要使用配置文件来解决
三、支持配置文件
一般配置文件以.conf结尾
在conf里,{}字典格式的字符串类型,在python里,{}是字典类型
![](https://img.haomeiwen.com/i19251823/bda4e45f5c94bab3.png)
![](https://img.haomeiwen.com/i19251823/b320608fbc610f28.png)
![](https://img.haomeiwen.com/i19251823/5ba3bbbf6f9607b8.png)
![](https://img.haomeiwen.com/i19251823/19cd4642095a4db9.png)
![](https://img.haomeiwen.com/i19251823/790b58999fd468ca.png)
![](https://img.haomeiwen.com/i19251823/7d219b390ae939d5.png)
这样才算真正的解耦了,配置路径——>在.conf配置文件里配置
但还有一个小问题,每次运行都要执行以下长串代码,过于繁杂
![](https://img.haomeiwen.com/i19251823/74f61c019c4de26b.png)
如此,就要使用shell脚本来解决
四、shell-readme(下载Git)
![](https://img.haomeiwen.com/i19251823/410878bdcc760c19.png)
![](https://img.haomeiwen.com/i19251823/f6ebfeb380514fed.png)
![](https://img.haomeiwen.com/i19251823/2f708f4760194f46.png)
Windows直接执行
run.sh
Linux
$ ./run.sh
没反应,查一下权限
$ ls -lh
没有-x表示不能执行,修改权限
$ chmod +x run.sh
$ ls -lh
$ ./run.sh
如果怕自己忘了,可以建一个readme文件进行描述,这样,隔一段时间后可依据readme文件运行程序
![](https://img.haomeiwen.com/i19251823/24cba22253051a0b.png)
网友评论