Django底层原理简介与安装
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底层原理简介与安装的更多相关文章
- django工作原理简介
django工作原理简介 先简单的介绍一下django的工作原理,其中还会涉及到Middleware(中间件,包括request, view, exception, response),URLConf ...
- Neo4j图数据库简介和底层原理
现实中很多数据都是用图来表达的,比如社交网络中人与人的关系.地图数据.或是基因信息等等.RDBMS并不适合表达这类数据,而且由于海量数据的存在,让其显得捉襟见肘.NoSQL数据库的兴起,很好地解决了海 ...
- 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期
一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交 ...
- Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理
Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...
- 2、docker安装:内核要求、docker三要素、安装、helloworld、底层原理
1.前提说明 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 2.前提条件:内 ...
- Django简介及安装
Django简介及安装 我们都知道,Django是一种基于Python的Web开发框架. 那么,什么是Web开发?Web开发指的是开发基于B/S架构,通过前后端的配合,将后台服务器的数据在浏览器上展现 ...
- python框架Django简介与安装
Django简介 关注公众号"轻松学编程"了解更多. 发布于2005年,最负盛名且成熟的Python网络框架 最初用来制作在线新闻的Web站点 开源Web框架,遵守BSD协议 BS ...
- 细细品味Storm_Storm简介及安装
Storm是由专业数据分析公司BackType开发的一个分布式实时数据处理软件,可以简单.高效.可靠地处理大量的数据流.Twitter在2011年7月收购该公司,并于2011年9月底正式将Storm项 ...
- Nutch搜索引擎(第2期)_ Solr简介及安装
1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...
随机推荐
- python os,sys模块的使用
首先,os模块是用来与操作系统进行交互的模块,可以对操作系统上的一些东西进行操作 而sys是用来对解释器进行一些操作的 一.os os.getcwd() 获取当前工作目录,即当前python脚本工作的 ...
- COGS 1215. [Tyvj Aug11] 冗余电网
★ 输入文件:ugrid.in 输出文件:ugrid.out 简单对比时间限制:1 s 内存限制:128 MB TYVJ八月月赛提高组第2题 测试点数目:5 测试点分值:20 --内存 ...
- CF Gym 100637K Microcircuits (DP)
题意:给你n个点,将这些点放在一个环上,问你不相交的连k条线的方案数.(没有重点) 题解:dp[i][j]表示i个点连j条线的方案数,那么新加一个点i, 情况1,i没有和之前的点相连,方案数为dp[i ...
- UVA 818 Cutting Chains 切断圆环链 (暴力dfs)
题意就是给一张无向图,去掉某些结点,然后连成一条链,问最少去掉几个结点. n很小n<=15,所以直接枚举2^15个状态就行啦. 链的条件是1.无环,2.没有度大于2的点,3.把n个散链连起来需要 ...
- Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...
- 【转】Popclip的JSON格式化扩展
http://liuyunclouder.github.io/2016/09/29/JSONizer:Popclip的JSON格式化扩展 作为一个MAC党,不好好利用MAC的神兵利器,简直就是罪过.A ...
- 虚IP切换原理
高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性.HA系统是目前企业防止核心计算机系统因故 ...
- 从输入url到页面加载完成发生了什么详解
这是一道经典的面试题,这道题没有一个标准的答案,它涉及很多的知识点,面试官会通过这道题了解你对哪一方面的知识比较擅长,然后继续追问看看你的掌握程度.当然我写的这些也只是我的一些简单的理解,从前端的角度 ...
- Silverlight日记:字符串装换成Path对象
一,需要动态绑定Path <UserControl x:Class="Secom.Emx2.SL.Common.Controls.EleSafe.Ele.Line" xmln ...
- Js笔记-第17课
课 // 作业 //深度拷贝 var obj = { name:'rong', age:'25', card:['visa','alipay'], nam :['1','2','3','4','4'] ...