Django环境目录搭建一栏:

利用wsgiref模块封装好的socket搭建服务端:

#利用wsgiref模块封装好的socket演示操作(例如accept\recv)
#也可以实现socket服务端的功能 from wsgiref.simple_server import make_server
#拆分开之后需要导入关联相应表格
import my_urls
from views import * #分到views里面
# def index(response):
# return 'ok'
#
# def time(response):
# return 'time'
#
# def error(response):
# return '404' #分到my_urls里面
# urls=[
# ('/index',index),
# ('/time',time),
#
# ] def my_server(environ,start_response):
#这里就不需要再accept、recv了,因为封装好了,只需要对接收数据进行处理就好
#environ是个字典:把请求头里所有的东西都切割出来了,不用再手动进行处理
#start_response是个函数:响应头信息HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n #取请求的地址:
# print(environ['PATH_INFO']) # 'PATH_INFO': '/ ',默认是空 类似于:GET /index HTTP/1.1 访问时输入什么就会返回什么 # conn.send(b'HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n')类似于这个功能
start_response('200 OK',[('Content-Type','text/html')])
# return [b'Hello wsgiref_socket'] #到这里就可以模拟MyWeb.py里面的socket服务端功能了 func=None
#遍历取出路由列表里面的各个元组值
# for url in urls:
for url in my_urls.urls: #判断用户请求的地址是不是写在路由里面的地址
if url[0] == environ['PATH_INFO']:
func=url[1] #相当与 func=index 或者 func=time
break
#判断是否为空
if func:
response=func(environ) #即 index(environ)
else:
response=error(environ) #wsgiref规定返回值就是要写在列表里面
return [response,] if __name__ == '__main__':
my=make_server('127.0.0.1',8002,my_server)
print('监听8002端口')
my.serve_forever()

my_urls路由配置:

import views

urls=[
('/index',views.index),
('/time',views.time),
('/user_list',views.user_list),
('/favicon.ico',views.favicon) ]

templates渲染html模板(和路由层对应):

1.index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index界面</title>
</head>
<body>
<img src="https://goss.veer.com/creative/vcg/veer/1600water/veer-136737644.jpg" alt="index">
</body>
</html>

2.time.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
@@time@@
</body>
</html>

3.user_list.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
<style>
th {
background: gray;
}
td { border: 1px solid black;
width: 200px;
height: 50px;
text-align: center;
}
th {
border: 1px solid black;
width: 200px;
height: 50px;
text-align: center;
}
</style>
</head>
<body>
<table style="border: 1px solid black;border-collapse: collapse;">
<thead>
<tr>
<th>id</th>
<th>用户名</th>
<th>密码</th> </tr>
</thead>
<tbody>
{% for user in user_list %}
<tr>
<td>{{user.id}}</td>
<td>{{user.name}}</td>
<td>{{user.password}}</td>
</tr> {%endfor%}
</tbody> </table>
</body>
</html>

views视图配置:

import pymysql
#jinja2是模板渲染(用于去渲染user_list.html中的文件)
from jinja2 import Template #把wsgiref里面的time index error 函数拆分过来 def index(response):
# return 'ok'
#从template里面调取网页(里面设定要响应返回给客户端的内容)
with open('templates/index.html','r',encoding='utf-8') as f:
data=f.read()
return data.encode('utf-8') def time(response):
# return 'time'
import datetime
now = datetime.datetime.now().strftime('%Y-%m-%d %X')
with open('templates/two.html', 'r', encoding='utf-8') as f:
data = f.read()
data = data.replace('@@time@@',now)
return data.encode('utf-8') def error(response):
return ''.encode('utf-8') def favicon(request):
with open('favicon.ico','rb') as f:
data=f.read()
return data def user_list(response):
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='root',
database='test' ) #不传参拿到是元组,传参之后得到的是字典
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from user')
user_list=cursor.fetchall()
print(user_list) #user_list列表[{'id':1,'name':yangzhizong,'password':123},{...}] #取到user_list.html模板
with open('templates/user_list.html','r',encoding='utf-8') as f:
data=f.read() #jinja2的应用,生成一个模板对象,需要传字符串
template=Template(data) #template是个对象,就是user_list.html
data=template.render(user_list=user_list) #调用对象的render方法,传入参数完成对html文件的渲染
return data.encode('utf-8')

待完善。。。

Django底层原理简介与安装的更多相关文章

  1. django工作原理简介

    django工作原理简介 先简单的介绍一下django的工作原理,其中还会涉及到Middleware(中间件,包括request, view, exception, response),URLConf ...

  2. Neo4j图数据库简介和底层原理

    现实中很多数据都是用图来表达的,比如社交网络中人与人的关系.地图数据.或是基因信息等等.RDBMS并不适合表达这类数据,而且由于海量数据的存在,让其显得捉襟见肘.NoSQL数据库的兴起,很好地解决了海 ...

  3. 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期

    一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交 ...

  4. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...

  5. 2、docker安装:内核要求、docker三要素、安装、helloworld、底层原理

    1.前提说明 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 2.前提条件:内 ...

  6. Django简介及安装

    Django简介及安装 我们都知道,Django是一种基于Python的Web开发框架. 那么,什么是Web开发?Web开发指的是开发基于B/S架构,通过前后端的配合,将后台服务器的数据在浏览器上展现 ...

  7. python框架Django简介与安装

    Django简介 关注公众号"轻松学编程"了解更多. 发布于2005年,最负盛名且成熟的Python网络框架 最初用来制作在线新闻的Web站点 开源Web框架,遵守BSD协议 BS ...

  8. 细细品味Storm_Storm简介及安装

    Storm是由专业数据分析公司BackType开发的一个分布式实时数据处理软件,可以简单.高效.可靠地处理大量的数据流.Twitter在2011年7月收购该公司,并于2011年9月底正式将Storm项 ...

  9. Nutch搜索引擎(第2期)_ Solr简介及安装

    1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...

随机推荐

  1. win10中使用win7/win8.1"个性化"

    直接下载使用: 点此下载 设置 Windows Registry Editor Version 5.00 ; ; Created by http://winaero.com, reedited by ...

  2. ABAP Development Tools的语法高亮实现原理

    ABAP Development Tools的前端是Java,根本识别不了ABAP.那么在ADT里的ABAP语法高亮是如何实现的? 第一次打开一个report时,显示在ADT里的代码是没有任何语法高亮 ...

  3. 激光推送报错:APNs is not available,please check your provisioning profile and certification 和 设置别名问题 app not registed, give up set tag:

    前几天,项目中用到了推送功能,就集成了激光,遇到了2个问题,就给大家分享一下, 第一个问题: 在集成的过程是按照激光的文档做的,但是最后配置完了,一运行,就打印出这么一句话, APNs is not ...

  4. 使用Selennium实现短信轰炸机

    前言 可以用来轰炸一下骗子,但最好不要乱用.本来初学Python,仅当学习. selenium和ChromeDriver的安装与配置 可参考这篇博客,这里不再赘述. 程序实现 短信轰炸机的原理是利用一 ...

  5. 使用Timer组件制作左右飘动的窗体

    实现效果: 知识运用: Form类的Left和Top属性 实现代码: private void timer1_Tick(object sender, EventArgs e) { Rectangle ...

  6. CRF条件随机场简介<转>

    转自http://hi.baidu.com/hehehehello/item/3b0d1f8ba1c2e5c698255f89 CRF(Conditional Random Field) 条件随机场是 ...

  7. java第八次作业:课堂上发布的前5张图片(包括匿名对象、单例模式恶汉式、自动生成对象、args[]数组使用、静态关键字)

  8. MFC中获得各种指针概述(个人觉得是很重要的重点)

    前言:这学期学习MFC(有点过时的东西),上课时,老师讲到获取当前活动指针,获取视图指针,文档指针,文档模板指针等(已晕) 后来下来真正写代码的时候发现这些几乎都是需要用到的东西,所以特此记录下,让自 ...

  9. Flash as3.0 保存MovieClip运动轨迹到json文件

    //放在第一帧调用 import flash.events.Event; import flash.display.MovieClip; stage.addEventListener(Event.EN ...

  10. 03大端和小端(Big endian and Little endian)

    1.大端和小端的问题 ​ 对于整型.长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节),而 Little endian 则相反 ...