Python之django框架简介及安装
一、django框架思想引入
我们知道在python中可以实现python代码做一个服务端,并且引用浏览器(brower)当作服务端,在浏览器中输入127.0.0.1:8080
import socket
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',8080))
server.listen(5)
while 1:
sock, addr = server.accept()
data = sock.recv(1024)
print(data.decode('utf-8'))
sock.send(b'HTTP/1.1 200 OK \r\n\r\n')
sock.send(b'hello world')
sock.close()
server.close()
浏览器便会展示hello world那么这个是基于socket模块,但是这个socket模块使用起来太过冗余,代码量稍微有点多。下面介绍的这个wsgiref模块,有了它我们要写的代码量会少很多,这个模块在底层给我们封装好了listen,accpet,recv等方法。拿来就用即可(拿来主义)
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app(应用程序)与web server(socket服务端)之间接口格式,实现web app与web server间的解耦。
通俗的说:当规范建立后,程序就不再重复编写web server(socket服务端),而是直接使用现成的实现WSGI的模块(例如:wsgiref、uwsgi、werkzeug),从而让程序员更加专注与业务代码
例:
from wsgiref.simple_server import make_server
def run(env,start_response):
start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])
msg = '真好看'
return msg.encode('utf-8')
if __name__ == '__main__':
server = make_server('127.0.0.1',8080,run)
print('欢迎来到8080端口')
server.serve_forever()
此时在浏览器中就会显示“真好看”,现在浏览器展示的只是静态页面且网址上没有后缀。那我们思考一下,如何让网页变为动态网页呢,我指定url(统一资源定位符)的后缀,然后让浏览器显示指定的页面呢?
在这里以index和login举例,代码如下
from wsgiref.simple_server import make_server
def index():
msg_index = 'Is Me baby,Index'
return msg_index.encode('utf-8')
def login():
msg_login = 'Is Me baby,Login'
return msg_login.encode('utf-8')
urls = [
('/index',index),
('/login',login),
]
def run(env,start_response):
"""
在此函数里进行逻辑判断
"""
global msg
start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])
PATH_INFO = env['PATH_INFO']
for url in urls:
if PATH_INFO == url[0]
msg = url[1]
break
if msg:
response = msg()
else:
res = '404 not found'
response = res.encode('utf-8')
return [response,]
if __name__ == '__main__':
server = make_server('127.0.0.1',8080,run)
print('欢迎来到8080端口')
server.serve_forever()
由上述代码可以实现输入不同的后缀展示不同的效果 那么再结合之前学习的前端页面就可以制作一个简单的web页面,但是又想到文件开发目录中不同的文件放置不同位置,为各种文件建立文件夹
如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rj48sR2y-1635934638566)(C:\Users\pilgirm\AppData\Roaming\Typora\typora-user-images\image-20210809183343373.png)]
如下代码
- templates
# index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#index {
width: 1500px;
height: 650px;
color: chocolate;
background: cornflowerblue;
text-align: center;
}
</style>
</head>
<body>
<h1 id="index">
你好世界
</h1>
</body>
</html>
# login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#login {
width: 1500px;
height: 650px;
color: chocolate;
background: cyan ;
text-align: center;
}
</style>
</head>
<body>
<h1 id = 'login'>
登录
</h1>
</body>
</html>
- urls.py(路由层)
import view
urls = [
("/index/",view.index),
("/login/",view.login),
]
- view.py(视图层)
import os
path = os.path.dirname(__file__)
def index():
# msg = 'Is Me baby! index'
with open(path+'/templates/index.html','r', encoding='utf-8') as f:
msg = f.read()
return msg.encode('utf-8')
def login():
# msg = 'Is Me baby! login'
with open(path+'/templates/login.html','r',encoding='utf-8') as s:
msg = s.read()
return msg.encode('utf-8')
- 手写web框架.py(主程序层)
from wsgiref.simple_server import make_server
import urls
# 主程序层
def run(env,start_response):
global msg
start_response('200 OK',[('Content-Type','text/html;charset=utf8'),])
PATH_INFO = env['PATH_INFO']
# msg = None
for url in urls.urls:
if PATH_INFO == url[0]:
msg = url[1]
break
if msg:
response = msg()
else:
msg = '404 is not found'
response = msg.encode('utf-8')
return [response,]
if __name__ == '__main__':
server = make_server('127.0.0.1',8081,run)
server.serve_forever()
由此一个简易版的web框架就搭建完成了如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c6GJyaVx-1635934638567)(C:\Users\pilgirm\AppData\Roaming\Typora\typora-user-images\image-20210809184014600.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZ8H6dBs-1635934638568)(C:\Users\pilgirm\AppData\Roaming\Typora\typora-user-images\image-20210809184030234.png)]
二、什么是django
Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外,在Dj ango框架中,还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性 。Django 项目源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有:
1、用于创建模型的对象关系映射
2、为最终用户设计较好的管理界面
3、URL设计
4、设计者友好语言的模板
5、缓存系统
1、python中三大主流框架
1、django
特点:大而全,非常重要的框架
缺点:比较笨重
2、Flask
特点: 小而精,非常重要的框架
缺点: 使用的第三方的库特别多
3、tornado
特点: 处理异步非阻塞和高并发非常在行
缺点: 我不会
2、安装django
- 在安装django之前需要知道django目前已经出到3.x版本了,django版本与你的python解释器有很大关联,如果你安装的有误很有可能你的django项目跑不起来,下图为django与python版本对照图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4tYf86iX-1635934638569)(C:\Users\pilgirm\AppData\Roaming\Typora\typora-user-images\image-20210809185313358.png)]
# 两种方法安装
# 第一种
pip install django==1.11.29(我安装的为1.11.29)
# 第二种
去官网下载 https://www.djangoproject.com/
3、django创建项目
# 两种创建方式
# 第一种命令行创建
"""
启动django服务
一定要进入所下载的django项目下的manage.py的同级目录,执行下面的命令
python manage.py runserver
创建项目命令
创建一个文件夹,用与存放django项目
djangoadmin startproject 项目名称
djangoadmin startproject djangoproject
运行django项目命令
python manage.py runserver 127.0.0.1:8000
创建应用命令
切入到创建的项目中,创建应用
python manage.py startapp 应用名称
python manage.py startapp app01
"""
*****************************************
# 第二种pycharm创建(******)
左上角找到file————>点击newproject——————>在左侧选择django————>在上面写你自己的django项目名称
展开python interpreter:python版本号————>选择proviously configgured interpreter
展开more settings————>在Application name里输入你的应用名称————>勾选Enable Django admin
如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nei9bnn4-1635934638570)(C:\Users\pilgirm\AppData\Roaming\Typora\typora-user-images\image-20210809191916474.png)]
文件含义:
appo1
migrations
__init__.py
admin.py:后台配置文件
apps.py:配置单独添加的每个应用
models.py:创建数据库模型的文件
tests.py:编写测试脚本的文件
views.py:视图控制器的文件
djangoProject
__init__.py
settings.py:配置文件
usrls.py:默认的路由文件
wsgi.py:服务器和框架之间的桥梁
templates:存放模板文件,如前端HTML CSS JS 等
db.splite3:django自带的数据库(一般不用)
manage.py:入口文件