django框架初探
django框架初探
1.web框架介绍
web框架本质是一个socket服务端。每一个端口只能被一个程序监听。
web程序分为两个部分:
服务器程序:对socket服务器封装,解析http请求,发送http响应。
应用程序:负责具体的业务逻辑。
WSGI:(Web Service Gateway Interface)WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。
我们先编写hello.py
,实现Web应用程序的WSGI处理函数:
#hello.py
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return '<h1>Hello, web!</h1>'
上面的application()
函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
environ:一个包含所有HTTP请求信息的dict
对象;
start_response:一个发送HTTP响应的函数。
application()
函数必须由WSGI服务器来调用。Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。
然后,再编写一个server.py
,负责启动WSGI服务器,加载application()
函数:
# server.py
# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数: from hello import application # 创建一个服务器,IP地址为空,端口是8000,处理函数是application: httpd = make_server('', 8000, application) print "Serving HTTP on port 8000..."
# 开始监听HTTP请求: httpd.serve_forever()
确保以上两个文件在同一个目录下,然后运行server.py
来启动WSGI服务器,启动成功后,打开浏览器,输入
http://localhost:8000/
,就可以看到结果了。web框架就是将web应用开发中通用的部分抽象出来,像造房子一样,形成一个框架,再去实现我们特定的功能。
常见的Python Web框架有:
django 全能型
tornado 优秀的异步框架
web.py 小巧的web框架
flask 优秀的轻量级的web框架
设计模式:
mtv:
m:model模型
t:template 模型(页面)
v:view 视图
mvc:Model-View-Controller,中文名“模型-视图-控制器”。和mtv没有本质的区别。
2.django框架的介绍
环境搭建,django安装
准备环境:
ubuntu
python3.5+
pycharm 2017.1.5+专业版
MySQL
每创建一个新的django项目,都要新建一个python隔离环境。
隔离环境:
1.查看 workon
2.创建 mkvirtualenv -p /usr/bin/python3.6 envname
3.进入 workon envname
4.退出 deactivate
5.删除虚拟环境 rmvirtualenv envname
创建一个名为crm的python隔离环境 mkvirtualenv -p /usr/bin/python3.6 crm
安装一个django包:pip install django
django简单操作:
1.创建项目: django-admin startproject <projectname>
2.pycharm创建项目远程关联:
3.启动服务
命令行:python manage.py runserver ip:port 在项目根目录
(ip:0.0.0.0)
用pycharm配置:
第一个View:
项目和应用
项目:有一些设置的django
创建一个应用:python manage.py startapp appname
应用可以有多个,应用之间通过项目交互
- linux下查看所有用户及所有用户组
- Linux给用户添加sudo权限
- 博弈论入门之威佐夫博弈
- jQuery插件 -- Form表单插件jquery.form.js
- PHP验证手机号码和归属地 PHP函数代码
- 浅谈PHP 5中垃圾回收算法的演化
- POJ 2484 A Funny Game(智商博弈)
- php pathinfo()的用法
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
- 微信公众平台开发
- BZOJ 1115: [POI2009]石子游戏Kam (阶梯nim)
- php性能监测模块XHProf
- BZOJ 1022: [SHOI2008]小约翰的游戏John (Anti-nim)
- 洛谷P2252 取石子游戏(威佐夫博弈)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Dialog全屏,去掉状态栏的方式
- Android 通过TCP协议上传指定目录文件的方法
- Android webview加载https链接错误或无响应的解决
- Android Manifest中meta-data扩展元素数据的配置与获取方式
- Android 配置gradle实现VersionCode自增实例
- 解决Android Studio Gradle Metadata特别慢的问题
- Android ProgressDialog用法之实现app上传文件进度条转圈效果
- Android实现获取meta-data和build.gradle的值
- 浅谈Android Studio导出javadoc文档操作及问题的解决
- Android获取清单文件中的meta-data,解决碰到数值为null的问题
- android studio 打包自动生成版本号与日期,apk输入路径详解
- 详解关于AndroidQ获取不到imsi解决方案
- 解决webview 第二次调用loadUrl页面不刷新的问题
- 浅谈 Android 7.0 多窗口分屏模式的实现
- Kotlin中的对象表达式和对象声明的具体使用