(day49)Django框架简介
一、Web框架
- 基于B/S架构,即浏览器和S端
- 基于HTTP协议收发消息
- S端分成server和application两部分
(一)本质
(1)动静态网页
- 动态网页:数据是实时获取的
- 静态网页:数据是写死的
(2)wsgiref模块
- Django模块的开发环境就是用这个模块做服务器
- 可以让网页变成动态网页
- 代替S端的socket server部分
import time
from wsgiref.simple_server import make_server
# 将返回不同的内容部分封装成函数
def index(url):
with open("index.html", "r", encoding="utf8") as f:
s = f.read()
now = str(time.time())
s = s.replace("@@oo@@", now)
return bytes(s, encoding="utf8")
def home(url):
with open("home.html", "r", encoding="utf8") as f:
s = f.read()
return bytes(s, encoding="utf8")
# 定义一个url和实际要执行的函数的对应关系
list1 = [
("/index/", index),
("/home/", home),
]
def run_server(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html;charset=utf8'), ]) # 设置HTTP响应的状态码和头信息
url = environ['PATH_INFO'] # 取到用户输入的url
func = None
for i in list1:
if i[0] == url:
func = i[1]
break
if func:
response = func(url)
else:
response = b"404 not found!"
return [response, ]
if __name__ == '__main__':
httpd = make_server('127.0.0.1', 8090, run_server)
print("我在8090等你哦...")
httpd.serve_forever()
(3)jinja2模块
- 第三方模块,可以从数据库中查询数据,动态的替换html中的内容,再交给浏览器渲染
- 原理:字符串替换,在html页面中按照jinja2的语法规则编写,其内部就可以按照指定的语法进行替换,从而达到动态返回内容
(4)手动实现思路
纯手撸简易版本web框架
- 手动处理socket实现通信(未考虑并发)
- 手动处理HTTP数据,获取用户访问的后缀(没有考虑其他数据)
借助第三方模块
wsgiref模块:web服务网关接口
- 封装了Socket,支持并发
- 处理HTTP协议,封装成了一个字典
- 也是flask的启动源码
- django自带的模块,本身可以承受1000左右的并发量
基于上面代码拆分文件夹
- urls.py:路由和视图函数对应关系(视图函数也可以是类)
- views.py:一堆处理业务逻辑的视图函数
- Templates:放html文件
动静态网页
html页面上的数据是否写死
利用字符串替换实现时间动态展示
基于jinja2模板语法,实现后端给html页面传值
模板语法是在后端生效,浏览器无法识别模板语法,所有的数据渲染全都是在后端生成好,然后将html页面发送给浏览器
变量相关:{{}}
逻辑相关:{%%}
{%for i in user_list%} {%endfor%}
利用jinja2实现前端、后端、数据库三者结合
(二)python主流框架
(1)Django
- 大而全、自带的组件和功能多,相当于航空母舰
- 小项目时会显得笨重
(2)flask
- 小而精、自带组件和功能少,依赖第三方组件,相当于游骑兵
- 第三方模块多,比django还多
(3)tornado
异步非阻塞,甚至可以用来开发游戏服务器
(4)区别
A:socket部分
B:路由和视图匹配
C:模板语法
Django:
A用的是别人的(wsgiref模块)
B自己写的
C自己写的
flask:
A用的比人的(werkzeug)
B自己写的
C用的别人的 (jinja2模块)
tornado:
ABC都是自己写的
二、Django简介
(一)安装
- 安装:
pip install django==1.11.11 - 检测是否安装成功:
django-admin
(二)使用
(1)命令行使用
创建django项目
django-admin startproject 项目名(比如mysite)创建应用
切换项目文件夹目录下
python3 manage.py startapp 应用名启动django项目
切换到项目文件夹目录下:
python manage.py runserverpython manage.py runserver 127.0.0.1:8080注意
- 不会自动创建templates文件夹
- templates文件路径也不会自动配置
(2)pycharm使用
python解释器不能使用3.7版本,有bug
创建运用
打开它Tools中的
run manaege.py task,输入startapp
(三)app
(1)概念
django是一个以开发app为主要功能的框架
一个django项目就像一所大学,那么app就是其中的各个学院
大学为学院提供了一个环境,每个大学也可以有多个学院
(2)app注册
创建好的app需要在django配置文件中注册方可生效
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'app01' # 简便写法
'app01.apps.App01Config' # 最完整的写法
]
(四)django文件功能
(1)项目同名的文件夹
- settings.py:用户可以配置的配置的文件
- urls.py:路由和视图函数对应关系
(2)应用名文件夹
- migrations文件夹:所有数据库相关的操作记录
- admin.py:django的admin后台管理
- apps.py:注册app相关
- models.py:数据库相关的模型类
- tests.py:测试文件
- views.py:处理业务逻辑的视图函数
(3)manage.py
django的入口文件
(4)templates文件夹
存放html文件
(五)基础三件套
from django.shortcuts import HttpResponse, render,redirect
(1)HttpResponse
内部传入一个字符串参数返回给浏览器
def index(request):
# 业务逻辑码
return HttpResponse('OK')
(2)render
返回填充好数据的html文件和内部传入的字典数据
def index(request):
# 业务逻辑代码
return render(request,'index.html',{'name':'wick','hobby':['sleep','drink']})
(3)redirect
重定向到指定的URL
def index(request):
# 业务逻辑码
return redirect('/home/')
(六)常见错误
(1)“UnicodeEncodeError...”
通常是因为计算机名为中文,改为英文后重启即可
(2) “SyntaxError: Generator expression must be parenthesized”
通常是因为使用了python3.7版本,该版本于django有兼容性问题
(day49)Django框架简介的更多相关文章
- Python学习(三十)—— Django框架简介
转载自:http://www.cnblogs.com/liwenzhou/p/8296964.html Django框架简介 一.MVC框架和MTV框架(了解即可) MVC,全名是Model View ...
- Django框架简介及模板Template,filter
Django框架简介 MVC框架和MTV框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View) ...
- Django框架简介与使用注意事项
一.Django框架简介 MVC框架和MTV框架 MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model). ...
- python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)
12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...
- wsgiref模块、web框架、django框架简介
"""web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...
- 手动搭建简易web框架与django框架简介
目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...
- Python学习笔记_04:Django框架简介
目录 1 什么是Django? 2 Django框架的开发环境搭建 3 Django操作MySql数据库简介 4 功能强大的Django管理工具应用 1 什么是Django? Django是应用于We ...
- Django框架简介,wsgiref 与 jinja2 模块
目录 框架简介 wsgiref模块 jinja2 模块 框架简介 Django是一个web开发框架,用来开发web应用,本质就是, web框架+socket服务端 MVC框架和MTV框架 MVC,全名 ...
- Django ---- 框架简介
MVC框架和MTV框架 mvc,全名是 Model View Controller, 是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Cont ...
- Django框架简介-开头
一.MVC框架和MTV框架(了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制 ...
随机推荐
- cookie和session了解吗
Cookie 和Session是什么? 彻底搞懂cookie的运行原由? 什么时候不能用Cookie,什么时候不能用Session session在什么时候创建,以及session一致性问题 Cook ...
- AcWing 800. 数组元素的目标和
网址 https://www.acwing.com/solution/AcWing/content/2064/ 题目描述给定两个升序排序的有序数组A和B,以及一个目标值x,请你求出满足A[i] + B ...
- JPA的一些问题
Error creating bean with name 'mainController': Unsatisfied dependency expressed through field 'test ...
- ZEN、ELECTRA、ALBERT
一.ZEN 目前,大多数中文预训练模型基本上沿用了英文模型的做法,聚焦于小颗粒度文本单元(字)的输入.然而,与英文相比,中文没有空格等明确的词语边界.这个特点使得很多文本表达中存在的交叉歧义也被带入了 ...
- js正则高级函数(replace,matchAll用法),实现正则替换(实测很有效)
有这么一个文档,这是在PC端显示的效果,如果放在移动端,会发现字体大小是非常大的,那么现在想让这个字体在移动端能按照某个比例缩小,后台返回的数据格式是: <html> <head&g ...
- C#开发BIMFACE系列20 服务端API之获取模型数据5:批量获取构件属性
系列目录 [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性>中介绍了获取单个文件/模型的单个构建的属性,本篇介绍 ...
- React Hooks用法大全
前言 在 React 的世界中,有容器组件和 UI 组件之分,在 React Hooks 出现之前,UI 组件我们可以使用函数,无状态组件来展示 UI,而对于容器组件,函数组件就显得无能为力,我们依赖 ...
- IT兄弟连 Java语法教程 Java语法基础 经典面试题
1.Java语言中有几种基本类型?分别是什么?请详细说明每种类型的范围以及所占的空间大小? Java语言中有8中基本类型,分别是代表整形的byte.short.int和long,代表浮点型的float ...
- 前端笔记之React(七)redux-saga&Dva&路由
一.redux-saga解决异步 redux-thunk 和 redux-saga 使用redux它们是必选的,二选一,它们两个都可以很好的实现一些复杂情况下redux,本质都是为了解决异步actio ...
- 使用csv模块读写csv格式文件
import csv class HandleCsv: ''' csv文件处理类 ''' def __init__(self, filename): ''' 构造器 :param filename: ...