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. 使用as开发jni入门(附验证):配置ndk开发环境,配置as相关jni配置

    编写jni,生成so文件: 1.通过as内置的Android SDK下载需要使用的ndk,在系统环境变量设置相关参数 2.新建一个普通as项目,新建一个类,用来静态加载so库和书写本地native方法 ...

  2. 为什么要用mallloc

    为什么要用malloc函数申请内存空间? 有的程序往往在运行时才知道要动态分配多大的内存,例如: void foo(char *str, int n) { char buf[?]; strncpy(b ...

  3. 挂sqlserver计划,系统自动分配拣货任务

    USE [P2WMS_WH43] GO /****** Object: StoredProcedure [dbo].[sp_fru_CalcAllocatePickData] Script Date: ...

  4. Vue风格指南总结及对应ESLint规则配置

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/10906951.html,多谢,=.=~ 必要的:规避错误: 强烈推荐:改善可读性和开发体验: 推 ...

  5. python基础教程总结6——类

    1. 如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class  ...

  6. 晒一下MAC下终端颜色配置

    效果图: ~/.vimrc 配置 filetype on set history=1000 set background=dark syntax on set autoindent set smart ...

  7. 【转】iOS-生成Bundle包-引入bundle-使用bundle

    在我们使用第三方框架时,常常看到XXX.bundle的文件. 我们找到该文件,显示包内容,大致看到很多资源文件:图片.配置文本.XIB文件……   什么是Bundle文件? 简单理解,就是资源文件包. ...

  8. HTML之基本语法(段落标签、标题标签、空格标签、换行标签、图片标签和图片的基本属性)

    一.HTML标签 所谓的HTML的标签就是发明者认为定义好的一些单词,就相当于我们汉语中的字 二.HTML的语法 语法就是用来定义这些“字”应该如何解析或者书写的规则 三.常见标签及基本语法 1.人为 ...

  9. Python SciPy Sparse模块学习笔记

    1. sparse模块的官方document地址:http://docs.scipy.org/doc/scipy/reference/sparse.html   2. sparse matrix的存储 ...

  10. Map集合应用 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...

    package com.swift; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import ...