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:入口文件