<div class="iteye-blog-content-contain" style="font-size: 14px"><p><div id="cnblogs_post_body"></p>
<p> <p> 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。</p> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_db0e6ffa-633e-4730-97fb-dde796323f74" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_db0e6ffa-633e-4730-97fb-dde796323f74" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_db0e6ffa-633e-4730-97fb-dde796323f74" class="cnblogs_code_hide"> </p>
<p> <pre><span style="color: #000000">import socket</p>
<p> </p>
<p>def f1(request):</p>
<p> </span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p> 处理用户请求,并返回相应的内容</p>
<p> :param request: 用户请求的所有信息</p>
<p> :return:</p>
<p> </span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p> f </span>= open('index.fsw','rb'<span style="color: #000000">)</p>
<p> data </span>=<span style="color: #000000"> f.read()</p>
<p> f.close()</p>
<p> </span><span style="color: #0000ff">return</span><span style="color: #000000"> data</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p>&lt;body&gt;</p>
<p> &lt;h1&gt;用户登录&lt;/h1&gt;</p>
<p> &lt;form&gt;</p>
<p> &lt;p&gt;&lt;input type=</span>&quot;text&quot; placeholder=&quot;用户名&quot;<span style="color: #000000"> /&gt;&lt;/p&gt;</p>
<p> &lt;p&gt;&lt;input type=</span>&quot;password&quot; placeholder=&quot;密码&quot;<span style="color: #000000"> /&gt;&lt;/p&gt;</p>
<p> &lt;/form&gt;</p>
<p>&lt;/body&gt;</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p> </p>
<p>def f2(request):</p>
<p> f </span>= open('aricle.tpl','rb'<span style="color: #000000">)</p>
<p> data </span>=<span style="color: #000000"> f.read()</p>
<p> f.close()</p>
<p> print(data)</p>
<p> </span><span style="color: #0000ff">return</span><span style="color: #000000"> data</p>
<p> </p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p>&lt;body&gt;</p>
<p> &lt;table border=</span>&quot;1&quot;<span style="color: #000000">&gt;</p>
<p> &lt;thead&gt;</p>
<p> &lt;tr&gt;</p>
<p> &lt;th&gt;ID&lt;/th&gt;</p>
<p> &lt;th&gt;用户名&lt;/th&gt;</p>
<p> &lt;th&gt;邮箱&lt;/th&gt;</p>
<p> &lt;/tr&gt;</p>
<p> &lt;/thead&gt;</p>
<p> &lt;tbody&gt;</p>
<p> &lt;tr&gt;</p>
<p> &lt;th&gt;1&lt;/th&gt;</p>
<p> &lt;th&gt;root&lt;/th&gt;</p>
<p> &lt;th&gt;[email protected]&lt;/th&gt;</p>
<p> &lt;/tr&gt;</p>
<p> &lt;/tbody&gt;</p>
<p> &lt;/table&gt;</p>
<p>&lt;/body&gt;</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p> </p>
<p>routers </span>=<span style="color: #000000"> [</p>
<p> (</span>'/xxx'<span style="color: #000000">, f1),</p>
<p> (</span>'/ooo'<span style="color: #000000">, f2),</p>
<p>]#手动写的网址</p>
<p> </p>
<p> </p>
<p>def run():</p>
<p> sock </span>=<span style="color: #000000"> socket.socket()</p>
<p> sock.bind((</span>'127.0.0.1',8080<span style="color: #000000">))</p>
<p> sock.listen(</span>5<span style="color: #000000">)</p>
<p> </p>
<p> </span><span style="color: #0000ff">while</span><span style="color: #000000"> True:</p>
<p> conn,addr </span>=<span style="color: #000000"> sock.accept() # hang住</p>
<p> #print(conn)#获得的两个套接字,我去charm自己会发送请求一个</span>/favicon.ico页面的报文</p>
<p><span style="color: #000000"> # print(addr)</p>
<p> # 有人来连接了</p>
<p> # 获取用户发送的数据</p>
<p> data </span>= conn.recv(8096<span style="color: #000000">)</p>
<p> data </span>= str(data,encoding='utf-8'<span style="color: #000000">)</p>
<p> #print(data)#get报文</p>
<p> headers,bodys </span>= data.split('\r\n\r\n'<span style="color: #000000">)</p>
<p> #print(</span>&quot;head:&quot;<span style="color: #000000">,headers)</p>
<p> #print(</span>&quot;body:&quot;<span style="color: #000000">,bodys) body是空的</p>
<p> temp_list </span>= headers.split('\r\n'<span style="color: #000000">)</p>
<p> # print(temp_list)</p>
<p> method,url,protocal </span>= temp_list[0].split(' '<span style="color: #000000">)</p>
<p> # print(method) GET</p>
<p> # print(url) </span>/ooo /<span style="color: #000000">favicon.ico</p>
<p> # print(protocal) </span>/HTTP/1.1<span style="color: #000000"></p>
<p> conn.send(b</span>&quot;HTTP/1.1 200 OK\r\n\r\n&quot;<span style="color: #000000">)</p>
<p> </p>
<p> func_name </span>=<span style="color: #000000"> None</p>
<p> </span><span style="color: #0000ff">for</span> item <span style="color: #0000ff">in</span><span style="color: #000000"> routers:</p>
<p> </span><span style="color: #0000ff">if</span> item[0] ==<span style="color: #000000"> url:</p>
<p> func_name </span>= item[1<span style="color: #000000">]</p>
<p> </span><span style="color: #0000ff">break</span></p>
<p> </p>
<p> <span style="color: #0000ff">if</span><span style="color: #000000"> func_name:</p>
<p> response </span>=<span style="color: #000000"> func_name(data)</p>
<p> print(data)</p>
<p> </span><span style="color: #0000ff">else</span><span style="color: #000000">:</p>
<p> response </span>= b&quot;404&quot;<span style="color: #000000"></p>
<p> </p>
<p> conn.send(response)</p>
<p> conn.close()</p>
<p> </p>
<p></span><span style="color: #0000ff">if</span> __name__ == '__main__'<span style="color: #000000">:</p>
<p> run()</span></pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">静态网页</span></p>
<p> </div> </p>
<p> <p> 这种静态页面不能与数据库连接交互,所以也是非常的low。</p> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_bd2d7529-2c6b-49d7-88a8-b4ab2d67e492" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_bd2d7529-2c6b-49d7-88a8-b4ab2d67e492" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_bd2d7529-2c6b-49d7-88a8-b4ab2d67e492" class="cnblogs_code_hide"> </p>
<p> <pre><span style="color: #000000">import socket</p>
<p> </p>
<p>def f1(request):</p>
<p> </span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p> 处理用户请求,并返回相应的内容</p>
<p> :param request: 用户请求的所有信息</p>
<p> :return:</p>
<p> </span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p> f </span>= open('index.fsw','rb'<span style="color: #000000">)</p>
<p> data </span>=<span style="color: #000000"> f.read()</p>
<p> f.close()</p>
<p> </span><span style="color: #0000ff">return</span><span style="color: #000000"> data</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p>&lt;body&gt;</p>
<p> &lt;h1&gt;用户登录&lt;/h1&gt;</p>
<p> &lt;form&gt;</p>
<p> &lt;p&gt;&lt;input type=</span>&quot;text&quot; placeholder=&quot;用户名&quot;<span style="color: #000000"> /&gt;&lt;/p&gt;</p>
<p> &lt;p&gt;&lt;input type=</span>&quot;password&quot; placeholder=&quot;密码&quot;<span style="color: #000000"> /&gt;&lt;/p&gt;</p>
<p> &lt;/form&gt;</p>
<p>&lt;/body&gt;</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p>def f2(request):</p>
<p> f </span>= open('aricle.tpl','r',encoding='utf-8'<span style="color: #000000">)</p>
<p> data </span>=<span style="color: #000000"> f.read()</p>
<p> f.close()</p>
<p> import time</p>
<p> ctime </span>=<span style="color: #000000"> time.time()</p>
<p> data </span>= data.replace('@@sw@@'<span style="color: #000000">,str(ctime))</p>
<p> </span><span style="color: #0000ff">return</span> bytes(data,encoding='utf-8'<span style="color: #000000">)</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p>&lt;body&gt;</p>
<p> &lt;table border=</span>&quot;1&quot;<span style="color: #000000">&gt;</p>
<p> &lt;thead&gt;</p>
<p> &lt;tr&gt;</p>
<p> &lt;th&gt;ID&lt;/th&gt;</p>
<p> &lt;th&gt;用户名&lt;/th&gt;</p>
<p> &lt;th&gt;邮箱&lt;/th&gt;</p>
<p> &lt;/tr&gt;</p>
<p> &lt;/thead&gt;</p>
<p> &lt;tbody&gt;</p>
<p> &lt;tr&gt;</p>
<p> &lt;th&gt;1&lt;/th&gt;</p>
<p> &lt;th&gt;@@sw@@&lt;/th&gt;</p>
<p> &lt;th&gt;[email protected]&lt;/th&gt;</p>
<p> &lt;/tr&gt;</p>
<p> &lt;/tbody&gt;</p>
<p> &lt;/table&gt;</p>
<p>&lt;/body&gt;</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p>def f3(request):</p>
<p> import pymysql</p>
<p> </p>
<p> # 创建连接</p>
<p> conn </span>= pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='jeff@123', db='db1'<span style="color: #000000">)</p>
<p> cursor </span>= conn.cursor(cursor=<span style="color: #000000">pymysql.cursors.DictCursor)</p>
<p> cursor.execute(</span>&quot;select id,username,password from userinfo&quot;<span style="color: #000000">)</p>
<p> user_list </span>=<span style="color: #000000"> cursor.fetchall()</p>
<p> #print(user_list)</p>
<p> cursor.close()</p>
<p> conn.close()</p>
<p> </p>
<p> content_list </span>=<span style="color: #000000"> []</p>
<p> </span><span style="color: #0000ff">for</span> row <span style="color: #0000ff">in</span><span style="color: #000000"> user_list:</p>
<p> tp </span>= &quot;&lt;tr&gt;&lt;td&gt;%s&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;&quot; %(row['id'],row['username'],row['password'<span style="color: #000000">])</p>
<p> content_list.append(tp)</p>
<p> content </span>= &quot;&quot;<span style="color: #000000">.join(content_list)</p>
<p> </p>
<p> </p>
<p> f </span>= open('userlist.html','r',encoding='utf-8'<span style="color: #000000">)</p>
<p> template </span>=<span style="color: #000000"> f.read()</p>
<p> f.close()</p>
<p> </p>
<p> # 模板渲染(模板</span>+<span style="color: #000000">数据)</p>
<p> data </span>= template.replace('@@sdfsdffd@@'<span style="color: #000000">,content)</p>
<p> </span><span style="color: #0000ff">return</span> bytes(data,encoding='utf-8'<span style="color: #000000">)</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p>mysql&gt; select * from userinfo;</p>
<p>+----+----------+----------+</p>
<p>| id | username | password |</p>
<p>+----+----------+----------+</p>
<p>| 1 | alex | 123 |</p>
<p>+----+----------+----------+</p>
<p>&lt;body&gt;</p>
<p> &lt;table border=</span>&quot;1&quot;<span style="color: #000000">&gt;</p>
<p> &lt;thead&gt;</p>
<p> &lt;tr&gt;</p>
<p> &lt;th&gt;ID&lt;/th&gt;</p>
<p> &lt;th&gt;用户名&lt;/th&gt;</p>
<p> &lt;th&gt;邮箱&lt;/th&gt;</p>
<p> &lt;/tr&gt;</p>
<p> &lt;/thead&gt;</p>
<p> &lt;tbody&gt;</p>
<p> @@sdfsdffd@@</p>
<p> &lt;/tbody&gt;</p>
<p> &lt;/table&gt;</p>
<p>&lt;/body&gt;</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p>def f4(request):</p>
<p> import pymysql</p>
<p> </p>
<p> # 创建连接</p>
<p> conn </span>= pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='jeff@123', db='db1'<span style="color: #000000">)</p>
<p> cursor </span>= conn.cursor(cursor=<span style="color: #000000">pymysql.cursors.DictCursor)</p>
<p> cursor.execute(</span>&quot;select id,username,password from userinfo&quot;<span style="color: #000000">)</p>
<p> user_list </span>=<span style="color: #000000"> cursor.fetchall()</p>
<p> cursor.close()</p>
<p> conn.close()</p>
<p> </p>
<p> f </span>= open('hostlist.html','r',encoding='utf-8'<span style="color: #000000">)</p>
<p> data </span>=<span style="color: #000000"> f.read()</p>
<p> f.close()</p>
<p> </p>
<p> # 基于第三方工具实现的模板渲染</p>
<p> from jinja2 import Template</p>
<p> template </span>=<span style="color: #000000"> Template(data)</p>
<p> data </span>= template.render(xxxxx=user_list,user='sdfsdfsdf'<span style="color: #000000">)</p>
<p> </span><span style="color: #0000ff">return</span> data.encode('utf-8'<span style="color: #000000">)</p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p> {% for row in xxxxx %}</p>
<p> &lt;tr&gt;</p>
<p> &lt;td&gt;{{row.id}}&lt;/td&gt;</p>
<p> &lt;td&gt;{{row.username}}&lt;/td&gt;</p>
<p> &lt;td&gt;{{row.password}}&lt;/td&gt;</p>
<p> &lt;/tr&gt;</p>
<p> {% endfor %}</p>
<p> &lt;/tbody&gt;</p>
<p> &lt;/table&gt;</p>
<p> {{user}}</p>
<p> </p>
<p></span>&quot;&quot;&quot;<span style="color: #000000"></p>
<p> </p>
<p>routers </span>=<span style="color: #000000"> [</p>
<p> (</span>'/xxx'<span style="color: #000000">, f1),</p>
<p> (</span>'/ooo'<span style="color: #000000">, f2),</p>
<p> (</span>'/userlist.html'<span style="color: #000000">, f3),</p>
<p> (</span>'/host.html'<span style="color: #000000">, f4),</p>
<p>]</p>
<p> </p>
<p> </p>
<p>def run():</p>
<p> sock </span>=<span style="color: #000000"> socket.socket()</p>
<p> sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, </span>1<span style="color: #000000">)</p>
<p> sock.bind((</span>'127.0.0.1',8080<span style="color: #000000">))</p>
<p> sock.listen(</span>5<span style="color: #000000">)</p>
<p> </p>
<p> </span><span style="color: #0000ff">while</span><span style="color: #000000"> True:</p>
<p> conn,addr </span>=<span style="color: #000000"> sock.accept() # hang住</p>
<p> # 有人来连接了</p>
<p> # 获取用户发送的数据</p>
<p> data </span>= conn.recv(8096<span style="color: #000000">)</p>
<p> data </span>= str(data,encoding='utf-8'<span style="color: #000000">)</p>
<p> headers,bodys </span>= data.split('\r\n\r\n'<span style="color: #000000">)</p>
<p> temp_list </span>= headers.split('\r\n'<span style="color: #000000">)</p>
<p> method,url,protocal </span>= temp_list[0].split(' '<span style="color: #000000">)</p>
<p> conn.send(b</span>&quot;HTTP/1.1 200 OK\r\n\r\n&quot;<span style="color: #000000">)</p>
<p> </p>
<p> func_name </span>=<span style="color: #000000"> None</p>
<p> </span><span style="color: #0000ff">for</span> item <span style="color: #0000ff">in</span><span style="color: #000000"> routers:</p>
<p> </span><span style="color: #0000ff">if</span> item[0] ==<span style="color: #000000"> url:</p>
<p> func_name </span>= item[1<span style="color: #000000">]</p>
<p> </span><span style="color: #0000ff">break</span></p>
<p> </p>
<p> <span style="color: #0000ff">if</span><span style="color: #000000"> func_name:</p>
<p> response </span>=<span style="color: #000000"> func_name(data)</p>
<p> </span><span style="color: #0000ff">else</span><span style="color: #000000">:</p>
<p> response </span>= b&quot;404&quot;<span style="color: #000000"></p>
<p> </p>
<p> conn.send(response)</p>
<p> conn.close()</p>
<p> </p>
<p></span><span style="color: #0000ff">if</span> __name__ == '__main__'<span style="color: #000000">:</p>
<p> run()</span></pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">动态页面</span></p>
<p> </div> </p>
<p> <p> 这里要说两点,首先这里使用了jinjia2模块,所以要简单的介绍一下这个模块。</p> </p>
<p> <p> 渲染模板(使用render_template方法)</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre>@app.route(<span style="color: #800000">'</span><span style="color: #800000">/about/</span><span style="color: #800000">'</span><span style="color: #000000">)</p>
<p></span><span style="color: #0000ff">def</span><span style="color: #000000"> about():</p>
<p> </span><span style="color: #008000">#</span><span style="color: #008000"> return render_template('about.html',user='username')</span></p>
<p> <span style="color: #0000ff">return</span> render_template(<span style="color: #800000">'</span><span style="color: #800000">about.html</span><span style="color: #800000">'</span>,**{<span style="color: #800000">'</span><span style="color: #800000">user</span><span style="color: #800000">'</span>:<span style="color: #800000">'</span><span style="color: #800000">username</span><span style="color: #800000">'</span>})</pre> </p>
<p> </div> </p>
<p> <p> 渲染模版时有两种传递参数的方式:用 var='value' 传递一个参数;使用字典组织多个参数,并且加两个<code>*</code>号转换成关键字参数传入。</p> </p>
<p> <p> 在jinja2模板中:</p> </p>
<p> <p><code> {{ ... }}</code>:装载一个变量,模板渲染的时候,会使用传进来的同名参数这个变量代表的值替换掉。</p> </p>
<p> <p><code> {% ... %}</code>:装载一个控制语句。</p> </p>
<p> <p><code> {# ... #}</code>:装载一个注释,模板渲染的时候会忽视这中间的值。</p> </p>
<p> <p> 变量:</p> </p>
<p> <p> 设置全局变量:{% set name='xx' %},之后就可以使用此变量了。</p> </p>
<p> <p> 设置局部变量:</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre>{% with foo = 42 %<span style="color: #000000">}</p>
<p>{{ foo }}</p>
<p>{</span>% endwith %}</pre> </p>
<p> </div> </p>
<p> <p> 这里的foo变量只能在with标签中使用。</p> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_019b901b-fa90-4f17-abf9-0605a1f8bd06" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_019b901b-fa90-4f17-abf9-0605a1f8bd06" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_019b901b-fa90-4f17-abf9-0605a1f8bd06" class="cnblogs_code_hide"> </p>
<p> <pre>{% <span style="color: #0000ff">if</span> kenny.sick %<span style="color: #000000">}</p>
<p>Kenny </span><span style="color: #0000ff">is</span><span style="color: #000000"> sick.</p>
<p>{</span>% <span style="color: #0000ff">elif</span> kenny.dead %<span style="color: #000000">}</p>
<p>You killed Kenny! You bastard!!!</p>
<p>{</span>% <span style="color: #0000ff">else</span> %<span style="color: #000000">}</p>
<p>Kenny looks okay </span>---<span style="color: #000000"> so far</p>
<p>{</span>% endif %}</pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">if语句</span></p>
<p> </div> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_42db93fd-cc3e-4cd5-9801-047d02adb69e" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_42db93fd-cc3e-4cd5-9801-047d02adb69e" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_42db93fd-cc3e-4cd5-9801-047d02adb69e" class="cnblogs_code_hide"> </p>
<p> <pre><span style="color: #008000">#</span><span style="color: #008000">一般循环</span></p>
<p>&lt;ul&gt;<span style="color: #000000"></p>
<p>{</span>% <span style="color: #0000ff">for</span> user <span style="color: #0000ff">in</span> users %<span style="color: #000000">}</p>
<p></span>&lt;li&gt;{{ user.username|e }}&lt;/li&gt;<span style="color: #000000"></p>
<p>{</span>% endfor %<span style="color: #000000">}</p>
<p></span>&lt;/ul&gt;</p>
<p><span style="color: #008000">#</span><span style="color: #008000">遍历字典</span></p>
<p>{% <span style="color: #0000ff">for</span> key, value <span style="color: #0000ff">in</span> my_dict.iteritems() %<span style="color: #000000">}</p>
<p></span>&lt;dt&gt;{{ key|e }}&lt;/dt&gt;</p>
<p>&lt;dd&gt;{{ value|e }}&lt;/dd&gt;<span style="color: #000000"></p>
<p>{</span>% endfor %}</pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">for循环</span></p>
<p> </div> </p>
<p> <p> jinja2模块最重要的部分是宏,宏相当于一个搭建好的页面一部分,可以被引入,可以往宏传递参数。可以将一些经常用到的代码片段放到宏中,然后把一些不固定的值抽取出来当成一个变量,在使用宏时传递参数,从而将宏渲染成为页面的一部分。</p> </p>
<p> <p> 更多关于此模块的操作,可以查看博客https://www.cnblogs.com/ygj0930/p/7170621.html。</p> </p>
<p> <p> 要说的第二点就是这种方法还是太low了。</p> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_0debd8bd-9a49-4b97-bb0e-8be8ae2f2f9b" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_0debd8bd-9a49-4b97-bb0e-8be8ae2f2f9b" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_0debd8bd-9a49-4b97-bb0e-8be8ae2f2f9b" class="cnblogs_code_hide"> </p>
<p> <pre><span style="color: #0000ff">import</span><span style="color: #000000"> socket</p>
<p> </p>
<p></span><span style="color: #0000ff">def</span><span style="color: #000000"> handle_request(client):</p>
<p> </p>
<p> buf </span>= client.recv(1024<span style="color: #000000">)</p>
<p> client.send(</span><span style="color: #800000">&quot;</span><span style="color: #800000">HTTP/1.1 200 OK\r\n\r\n</span><span style="color: #800000">&quot;</span>.encode(<span style="color: #800000">&quot;</span><span style="color: #800000">utf8</span><span style="color: #800000">&quot;</span><span style="color: #000000">))</p>
<p> client.send(</span><span style="color: #800000">&quot;</span><span style="color: #800000">&lt;h1 style='color:red'&gt;Hello, yuan&lt;/h1&gt;</span><span style="color: #800000">&quot;</span>.encode(<span style="color: #800000">&quot;</span><span style="color: #800000">utf8</span><span style="color: #800000">&quot;</span><span style="color: #000000">))</p>
<p> </p>
<p></span><span style="color: #0000ff">def</span><span style="color: #000000"> main():</p>
<p> </p>
<p> sock </span>=<span style="color: #000000"> socket.socket(socket.AF_INET, socket.SOCK_STREAM)</p>
<p> sock.bind((</span><span style="color: #800000">'</span><span style="color: #800000">localhost</span><span style="color: #800000">'</span>,8001<span style="color: #000000">))</p>
<p> sock.listen(</span>5<span style="color: #000000">)</p>
<p> </p>
<p> </span><span style="color: #0000ff">while</span><span style="color: #000000"> True:</p>
<p> connection, address </span>=<span style="color: #000000"> sock.accept()</p>
<p> handle_request(connection)</p>
<p> connection.close()</p>
<p> </p>
<p></span><span style="color: #0000ff">if</span> <span style="color: #800080">__name__</span> == <span style="color: #800000">'</span><span style="color: #800000">__main__</span><span style="color: #800000">'</span><span style="color: #000000">:</p>
<p> </p>
<p> main()</span></pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">最low的socket服务端</span></p>
<p> </div> </p>
<p> <p> 最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。</p> </p>
<p> <p> 如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。</p> </p>
<p> <p> 正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用Python编写Web业务。这个接口就是WSGI:Web Server Gateway Interface。</p> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_1fb9732c-1f6e-4572-96b7-6659ed9df9dd" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_1fb9732c-1f6e-4572-96b7-6659ed9df9dd" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_1fb9732c-1f6e-4572-96b7-6659ed9df9dd" class="cnblogs_code_hide"> </p>
<p> <pre><span style="color: #008000">#</span><span style="color: #008000"> from wsgiref.simple_server import make_server</span><span style="color: #008000"></p>
<p>#</p>
<p>#</p>
<p>#</span><span style="color: #008000"> def application(environ, start_response):</span><span style="color: #008000"></p>
<p>#</span><span style="color: #008000"> start_response('200 OK', [('Content-Type', 'text/html')])</span><span style="color: #008000"></p>
<p>#</span><span style="color: #008000"> return [b'&lt;h1&gt;Hello, web!&lt;/h1&gt;&lt;h2&gt;Hello, py!&lt;/h2&gt;']</span><span style="color: #008000"></p>
<p>#</p>
<p>#</p>
<p>#</span><span style="color: #008000"> httpd = make_server('127.0.0.2', 8080, application)#(ip,pork,func)</span><span style="color: #008000"></p>
<p>#</p>
<p>#</span><span style="color: #008000"> print('Serving HTTP on port 8080...')</span><span style="color: #008000"></p>
<p>#</span><span style="color: #008000"> # 开始监听HTTP请求:</span><span style="color: #008000"></p>
<p>#</span><span style="color: #008000"> httpd.serve_forever()</span></pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">wsgiref模块</span></p>
<p> </div> </p>
<p> <h1>django入门<a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/Jeffding/p/7836702.html"><br /></a></h1> </p>
<p> <p> django是一个基于python的高级web开发框架,因为他的高度集成,将会在今后的web开发里给予我们很大的帮助。</p> </p>
<p> <p> 首先创建一个django工程(加不加.py都可以):</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre>django-<span style="color: #000000">admin.py startproject project_name</p>
<p></span><span style="color: #008000">#</span><span style="color: #008000">django-admin.py startproject myblog</span></pre> </p>
<p> </div> </p>
<p> <p> 工程下面有几个核心测文件:</p> </p>
<p> <p> manage.py&nbsp; &nbsp;Django项目里面的管理工具,通过它可以调用django&nbsp;shell和数据库等。</p> </p>
<p> <p> settings.py&nbsp; &nbsp; 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。</p> </p>
<p> <p> urls.py&nbsp; &nbsp; 负责把URL模式映射到应用程序,路由(就是url与函数的对应关系)。</p> </p>
<p> <p> wsgi.py&nbsp; &nbsp; 调用python内置的wsgiref模块,web服务网关接口。他定义django用什么socket实现,默认就是wsgiref模块。</p> </p>
<p> <p> 注:除了命令的方式pycharm也可以进行django工程的搭建。</p> </p>
<p> <p> HttpResponse模块</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre><span style="color: #0000ff">from</span> django.conf.urls <span style="color: #0000ff">import</span><span style="color: #000000"> url</p>
<p></span><span style="color: #0000ff">from</span> django.shortcuts <span style="color: #0000ff">import</span><span style="color: #000000"> HttpResponse</p>
<p> </p>
<p></span><span style="color: #0000ff">def</span> index(request):<span style="color: #008000">#</span><span style="color: #008000">request用户请求相关的所有信息</span></p>
<p> <span style="color: #0000ff">return</span> HttpResponse(<span style="color: #800000">'</span><span style="color: #800000">whatever</span><span style="color: #800000">'</span><span style="color: #000000">)</p>
<p>urlpatterns </span>=<span style="color: #000000"> [</p>
<p> url(r</span><span style="color: #800000">'</span><span style="color: #800000">^index/</span><span style="color: #800000">'</span><span style="color: #000000">, index),</p>
<p>]</span></pre> </p>
<p> </div> </p>
<p> <p> 启动django自带的服务器,</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre>python manage.py runserver 8080</pre> </p>
<p> </div> </p>
<p> <p> 在浏览器访问127.0.0.1:8080/index即可查看到django渲染后的网页。</p> </p>
<p> <p> render模块</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre><span style="color: #0000ff">from</span> django.conf.urls <span style="color: #0000ff">import</span><span style="color: #000000"> url</p>
<p></span><span style="color: #0000ff">from</span> django.shortcuts <span style="color: #0000ff">import</span><span style="color: #000000"> render</p>
<p> </p>
<p></span><span style="color: #0000ff">def</span> index(request):<span style="color: #008000">#</span><span style="color: #008000">request用户请求相关的所有信息</span></p>
<p> <span style="color: #0000ff">return</span> render(request,<span style="color: #800000">&quot;</span><span style="color: #800000">a.html</span><span style="color: #800000">&quot;</span>)<span style="color: #008000">#</span><span style="color: #008000">默认要加request参数</span></p>
<p>urlpatterns =<span style="color: #000000"> [</p>
<p> url(r</span><span style="color: #800000">'</span><span style="color: #800000">^index/</span><span style="color: #800000">'</span><span style="color: #000000">, index),</p>
<p>]</span></pre> </p>
<p> </div> </p>
<p> <p> 接下来在浏览器访问127.0.0.1:8080/index即可查看到django渲染后的网页(服务器在改变了代码的情况下会自动重启)。还有,访问的前提是在templates目录下有一个a.html的文件。那么django是如何找到这个路径的呢,因为在settings.py下有一个TEMPLATES列表,其中'DIRS': [os.path.join(BASE_DIR, 'templates')]指明了render需要从这个目录下拿到。</p> </p>
<p> <p> 静态文件的配置</p> </p>
<p> <p> 在工程文件夹下创建一个static文件夹里面存放静态文件,并将路径写入settings.py下。</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre>STATIC_URL = <span style="color: #800000">'</span><span style="color: #800000">/static/</span><span style="color: #800000">'</span><span style="color: #000000"></p>
<p>STATICFILES_DIRS</span>=(os.path.join(BASE_DIR,<span style="color: #800000">'</span><span style="color: #800000">static</span><span style="color: #800000">'</span>),)</pre> </p>
<p> </div> </p>
<p> <p> 然后在导入文件时一律使用/static引入。</p> </p>
<p> <p> request相关</p> </p>
<p> <p> request.method获得当前请求的方法。request.GET与request.POST可以取到用户提交的数据。</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre><span style="color: #0000ff">from</span> django.conf.urls <span style="color: #0000ff">import</span><span style="color: #000000"> url</p>
<p></span><span style="color: #0000ff">from</span> django.shortcuts <span style="color: #0000ff">import</span><span style="color: #000000"> render,redirect</p>
<p> </p>
<p></span><span style="color: #0000ff">def</span> index(request):<span style="color: #008000">#</span><span style="color: #008000">request用户请求相关的所有信息</span></p>
<p> <span style="color: #0000ff">if</span> request.method ==<span style="color: #800000">'</span><span style="color: #800000">GET</span><span style="color: #800000">'</span>:<span style="color: #008000">#</span><span style="color: #008000">浏览器默认传get,区分返回来的信息</span></p>
<p> <span style="color: #0000ff">return</span> render(request,<span style="color: #800000">&quot;</span><span style="color: #800000">a.html</span><span style="color: #800000">&quot;</span><span style="color: #000000">)</p>
<p> </span><span style="color: #0000ff">else</span><span style="color: #000000">:</p>
<p> u</span>=request.POST.get(<span style="color: #800000">'</span><span style="color: #800000">user</span><span style="color: #800000">'</span>)<span style="color: #008000">#</span><span style="color: #008000">取出post方式传回来的字典的值</span></p>
<p> p=request.POST.get(<span style="color: #800000">'</span><span style="color: #800000">pwd</span><span style="color: #800000">'</span>)<span style="color: #008000">#</span><span style="color: #008000">get取不到会转化为none</span></p>
<p> <span style="color: #0000ff">if</span> u==<span style="color: #800000">'</span><span style="color: #800000">jeff</span><span style="color: #800000">'</span> <span style="color: #0000ff">and</span> p==<span style="color: #800000">'</span><span style="color: #800000">123</span><span style="color: #800000">'</span><span style="color: #000000">:</p>
<p> </span><span style="color: #0000ff">return</span> redirect(<span style="color: #800000">'</span><span style="color: #800000">http://www.baidu.com</span><span style="color: #800000">'</span><span style="color: #000000">)#当然也可以重定向到自己的目录</p>
<p> </span><span style="color: #0000ff">else</span><span style="color: #000000">:</p>
<p> </span><span style="color: #0000ff">return</span> render(request, <span style="color: #800000">&quot;</span><span style="color: #800000">a.html</span><span style="color: #800000">&quot;</span><span style="color: #000000">)</p>
<p>urlpatterns </span>=<span style="color: #000000"> [</p>
<p> url(r</span><span style="color: #800000">'</span><span style="color: #800000">^index/</span><span style="color: #800000">'</span><span style="color: #000000">, index),</p>
<p>]</span></pre> </p>
<p> </div> </p>
<p> <p> a.html中的修改:</p> </p>
<p> <div class="cnblogs_code"> </p>
<p> <pre><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE html</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">html </span><span style="color: #ff0000">lang</span><span style="color: #0000ff">=&quot;en&quot;</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">charset</span><span style="color: #0000ff">=&quot;UTF-8&quot;</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">link </span><span style="color: #ff0000">rel</span><span style="color: #0000ff">=&quot;stylesheet&quot;</span><span style="color: #ff0000"> href</span><span style="color: #0000ff">=&quot;/static/as.css&quot;</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span>Title<span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span>用户登录<span style="color: #0000ff">&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">form </span><span style="color: #ff0000">method</span><span style="color: #0000ff">=&quot;post&quot;</span><span style="color: #ff0000"> action</span><span style="color: #0000ff">=&quot;/index/&quot;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">{# 发送以post方式发到index下 #}</p>
<p> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;text&quot;</span><span style="color: #ff0000"> name</span><span style="color: #0000ff">=&quot;user&quot;</span><span style="color: #0000ff">/&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;password&quot;</span><span style="color: #ff0000"> name</span><span style="color: #0000ff">=&quot;pwd&quot;</span><span style="color: #0000ff">/&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;submit&quot;</span><span style="color: #ff0000"> value</span><span style="color: #0000ff">=&quot;login&quot;</span><span style="color: #0000ff">/&gt;</span></p>
<p> <span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></pre> </p>
<p> </div> </p>
<p> <p> 这样用户访问127.0.0.1:8080/index会使用get方法返回a.html页面,输入用户名和密码提交会用post方法返回给index页面经判断是重定向还是重新输入。</p> </p>
<p> <p> django的渲染模板</p> </p>
<p> <p> django基本的html的模板与jinja2很相似,我们可以在form表单里加入一个{{ msg }}的模板,然后在render里添加一个msg:value用于自动传入。</p> </p>
<p> <p> django的模板取序列的值也是简单粗暴,比如取列表就是{{&nbsp; list.index }}例如{{ s.0 }}{{ s.1 }},字典就是{{ dict.key }}例如{{row.id}}{{ row.name }}。</p> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_b92df400-e21d-4365-8490-c556b7675d06" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_b92df400-e21d-4365-8490-c556b7675d06" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_b92df400-e21d-4365-8490-c556b7675d06" class="cnblogs_code_hide"> </p>
<p> <pre><span style="color: #000000">from django.conf.urls import url</p>
<p>from django.contrib import admin</p>
<p>from django.shortcuts import HttpResponse,render,redirect</p>
<p> </p>
<p>def index(request):#request用户请求相关的所有信息</p>
<p> if request.method =='GET':</p>
<p> return render(request,&quot;a.html&quot;)</p>
<p> else:</p>
<p> u=request.POST.get('user')</p>
<p> p=request.POST.get('pwd')</p>
<p> print(u)</p>
<p> print(p)</p>
<p> if u=='jeff' and p=='123':</p>
<p> return render(request, &quot;b.html&quot;,{'user':[{'id':1,'name':'jeff','age':0},</p>
<p> {'id': 2, 'name': 'frank', 'age': 1},</p>
<p> {'id': 3, 'name': 'xixi', 'age': 2}]})</p>
<p> else:</p>
<p> return render(request, &quot;a.html&quot;)</p>
<p>urlpatterns = [</p>
<p> url(r'^admin/', admin.site.urls),</p>
<p> url(r'^index/', index),</p>
<p>]</span></pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">urls.py配置</span></p>
<p> </div> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_554ff84c-1803-4549-a429-a6a5e23f7498" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_554ff84c-1803-4549-a429-a6a5e23f7498" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_554ff84c-1803-4549-a429-a6a5e23f7498" class="cnblogs_code_hide"> </p>
<p> <pre><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE html</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">html </span><span style="color: #ff0000">lang</span><span style="color: #0000ff">=&quot;en&quot;</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">charset</span><span style="color: #0000ff">=&quot;UTF-8&quot;</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">link </span><span style="color: #ff0000">rel</span><span style="color: #0000ff">=&quot;stylesheet&quot;</span><span style="color: #ff0000"> href</span><span style="color: #0000ff">=&quot;/static/as.css&quot;</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span>Title<span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span>用户登录<span style="color: #0000ff">&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">form </span><span style="color: #ff0000">method</span><span style="color: #0000ff">=&quot;post&quot;</span><span style="color: #ff0000"> action</span><span style="color: #0000ff">=&quot;/index/&quot;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">{# 发送以post方式发到index下 #}</p>
<p> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;text&quot;</span><span style="color: #ff0000"> name</span><span style="color: #0000ff">=&quot;user&quot;</span><span style="color: #0000ff">/&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;password&quot;</span><span style="color: #ff0000"> name</span><span style="color: #0000ff">=&quot;pwd&quot;</span><span style="color: #0000ff">/&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">input </span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;submit&quot;</span><span style="color: #ff0000"> value</span><span style="color: #0000ff">=&quot;login&quot;</span><span style="color: #0000ff">/&gt;</span></p>
<p> <span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">a.html</span></p>
<p> </div> </p>
<p> <div class="cnblogs_code"></p>
<p> <img id="code_img_closed_b1de96d5-3838-43b4-aa78-bfba77efee0f" class="code_img_closed" src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt="" /></p>
<p> <img id="code_img_opened_b1de96d5-3838-43b4-aa78-bfba77efee0f" class="code_img_opened" style="display: none" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="" /> </p>
<p> <div id="cnblogs_code_open_b1de96d5-3838-43b4-aa78-bfba77efee0f" class="cnblogs_code_hide"> </p>
<p> <pre><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE html</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">html </span><span style="color: #ff0000">lang</span><span style="color: #0000ff">=&quot;en&quot;</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">meta </span><span style="color: #ff0000">charset</span><span style="color: #0000ff">=&quot;UTF-8&quot;</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span>Title<span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">table </span><span style="color: #ff0000">border</span><span style="color: #0000ff">=&quot;1&quot;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p> {% for item in user %}</p>
<p> </span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span>{{ item.id }}<span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span>{{ item.name }}<span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span>{{ item.age }}<span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span></p>
<p> <span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">a </span><span style="color: #ff0000">href</span><span style="color: #0000ff">=&quot;/del/?nid=={{ item.id }}&quot;</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">{# 跳转到专门的del页面 #}</p>
<p> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"></p>
<p> {% endfor %}{#循环结束 #}</p>
<p> </span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></p>
<p><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></pre> </p>
<p> </div> </p>
<p> <span class="cnblogs_code_collapse">b.html</span></p>
<p> </div> </p>
<p> <p> 这里render传入的字典可以使用pymsql导入,这样就与数据库紧密的连接到一起了。</p></p>
<p></div></p></div>
web框架前言
猜你喜欢
转载自sunmon.iteye.com/blog/2405641
今日推荐
周排行