后端框架django

后端框架

1.纯手撸web简易框架

软件开发架构

C/S架构

b/s架构

本质bs也是cs架构

wed 框架的本质:

所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了。

web后端

import socket

server = socket.socket()
server.bind(('127.0.0.1',8080))# 绑定IP和端口
server.listen(5)# 监听
"""
请求首行
b'GET / HTTP/1.1\r\n
请求头
Host: 127.0.0.1:8080\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
\r\n
请求体
'
"""

while True:
    # 等待连接
    conn, addr = server.accept()
    data = conn.recv(1024) # 接收客户端发来的消息
    conn.send(b'HTTP/1.1 200 OK\r\n\r\n') # 因为要遵循HTTP协议,所以回复的消息也要加状态行
    # print(data) # 从data中取到路径
    data = data.decode('utf-8')  # 一串字符串# 把收到的字节类型的数据转换成字符串
    target_url = data.split('\r\n')[0].split(' ')[1]
    # 判断url返回响应的内容即可
    if target_url == '/index':
        # conn.send(b'index')
        with open(r'D:\上海校区python13期视频\day49\01 demo.html','rb') as f:
            conn.send(f.read())
    elif target_url == '/login':
        conn.send(b'login')
    else:
        conn.send(b'404 error')
    conn.close()

需求

1.根据用户输入不同的后缀返回不同的内容

从符合http协议格式的数据中获取用户输入的后缀

不足之处:

1.socket代码是我们自己写的
2.http数据也是我们自己处理的

HTTP协议

超文本传输协议
规定了浏览器与服务端之间数据传输的格式

1.HTTP协议四大特性

1.基于请求响应(一次请求对应一次响应)
2.基于TCP/IP 作用于应用层之上的协议。
3.无状态
不保留客户端的状态
无论你来多少次 我都待你入初见
cookie   session    token  ...

- cookies: 存放在浏览器(客户端)的用户信息
- session: 存放在服务端的用户信息
  4.无连接
  长链接   websocket(类似于http协议的大补丁)  聊天室相关

2.数据格式

请求格式
请求首行(请求方式 协议版本)
请求头(一大堆k,v键值对)

请求体(携带的数据 并不是一直都有 有时候可能是空的 取决于你的请求方式)

响应格式
    响应首行(响应状态码)
    响应头(一大堆k,v键值对)

响应体(浏览器展示给用户看的数据)

3.响应状态码

用数字来表示一大堆提示信息
        1XX:服务端已经成功接收到客户端的数据正在处理  你可以继续提交
        2XX:200请求成功 服务端已经返回了你想要的数据
        3XX:重定向(原本想访问A但是内部自动给你转到了B上面)
        4XX:404请求资源不存在,403你当前不具备请求该资源的条件
        5XX:500服务端内部错误 机房卓火了 宕机  爆炸了
        公司内部可以自己定制自己的响应状态码

请求方式

1.get请求
        朝服务端要资源(获取数据)
        类似于浏览器窗口输入www.baidu.com获取百度首页
2.post请求
        朝服务端提交数据(提交数据)
        类似于登录注册功能

3.基于wsgiref模块撸

根据功能的不同拆分成不同的文件
用户在浏览器窗口输入url之所以能够获取到相应的资源
是因为后端早已经开设了相应的资源接口

基于wsgiref模块以及文件拆分的特点

只要你想要开设新的资源
    1.先在urls文件中写url与函数的对应关系
    2.再去views文件中写对应的函数
urls.py:路由与视图函数的对应关系
views.py:里面就是放的一堆视图函数(视图函数可以是函数也可以是类)
templates文件夹:里面放的就是一堆html文件(模板文件夹)

动静态网页

静态网页:

数据是写死的,永远不会改变

动态网页:

数据是动态获取的
    1.获取当前时间
    2.从数据库中获取数据

需求:

1.你给我写一个对应关系 一旦访问立刻展示当前访问的时间

2.后端有一个用户字典 你需要将该字典传递给html页面 并且在该页面上还可以将传递过来的数据当成字典数据进行获取值的操作

jinja2模块

from jinja2 import Template     Template是一个类
pip3 install jinja2
提供一个可以在HTML页面上书写类似于python后端的代码来操作数据(模块语法)

flask框架模板语法使用的就是jinja2模块,所以你只要下了flask框架 就会自动下载jinja2

模板语法(jinja2模板语法非常贴近python语法 但是并不是所有的框架使用的都是jinja模板语法)

{{ xxx }}   {{}}变量相关
    <p>{{xxx.username}}</p>
    <p>{{xxx['password']}}</p>
    <p>{{xxx.get('hobby')}}</p>
    <p>{{xxx.get('hobby')[0]}}</p>
    <p>{{xxx.get('hobby').1}}</p>

{%for user_dict in xxx %}   {% %}逻辑相关
        <tr>
            <td>{{ user_dict.id }}</td>
            <td>{{ user_dict.name }}</td>
            <td>{{ user_dict.hobby }}</td>
        </tr>
    {% endfor %}

for 循环

数据库中展现到前端的页面

1.路由与视图函数对应关系
2.视图函数
3.模板文件夹
4.模板语法(是在后端实现的 前端根本不识别)

web框架

python三大主流web框架

django
    优点:大而全 自身携带的组件和功能特别特别多  就类似于航空母舰

    缺点:不足之处:笨重
        当你的功能不多 不需要使用很多其他功能 
flask(源码600多行  请求上下文 应用上下文)
    优点:小而精 自身携带的组件和功能特别特别少  就类似于游骑兵
    虽然自身功能比较少  但是第三方支持该框架的模块特别特别多
    如果你将flask第三方模块全部叠加起来 甚至可以超过django

    缺点:不足之处:受限于第三方模块
tornado
    异步非阻塞
    天然支持高并发 甚至可以用它来开发游戏服务器

django框架

1.注意事项

1.计算机名称不能有中文
2.项目文件名也不要用中文
3.一个pycharm窗口就是一个单独的完整的项目
4.python解释器不要用3.7及以上的版本。(有些功能不兼容)

2.版本问题

1.x版本
2.X版本
推荐你使用1.X版本里面的
    1.11.09~1.11.13
如果你已经按照过不需要手动卸载 重新安会自动先卸载之前的版本再安装

django的安装

pip3 install django==1.11.11

4.测试是否安装成功

命令行输入django-admin

如何创建django项目

1.命令行

1.命令行
    1.创建django项目
        django-admin startproject mysite(项目名)
                

效果:创建一个mysite的文件夹

mysite
    -mysite
        --__init__.py
        --settings.py
        --urls.py
        --wsgi.py
    -manage.py

2.启动django项目(先切换到项目目录下)

方式一:python3 manage.py runserver # django默认的端口号是8000
方式二:python3 manage.py runserver host:prot

3.创建具有独立功能的app 通常情况下应该做到建明制衣

python manage.py startapp app01
    app01
        --migrations文件夹
        --__init__.py
        --admin.py
        --apps.py
        --models.py
        --tests.py
        --views.py
"""
            1.使用命令行创建的django项目是不会自动创建templates摸版本文件夹 你只能自己手动创建
            2.命令行创建的django项目不但没有templates文件夹配置文件中也没有填写路径
                而pycharm创建的会自动添加
"""

2.pycharm快捷创建

application 应用
django其实是一个专注于开发app的web框架
一个空的django项目就类似于是一所大学
app就类似于大学里面的各个学院
每个app其实就类似于不同的功能模块
    购物网站
        用户相关 user
            用户相关的app
        订单相关 order
            订单相关的app
        投诉相关 tousu
            投诉相关的app
不同的功能模块推荐使用不同的app去开发
django支持多app

在启动django项目的时候 你一定要注意确保同一个窗口下只有一个人django项目在启动

注意:

python 解释器版本不要使用3.7版本

推存使用3.4~3.6版本

django主要文件功能

mysite
    -mysite
        --__init__.py
        --settings.py  项目配置文件
        --urls.py      路由视图函数对应关系 项目的总路由
    --wsgi.py
    -manage.py
    app01
        --migrations文件夹  数据库改动记录
            ----__init__.py
        --__init__.py
        --admin.py          django后台管理
        --apps.py           注册app相关
        --models.py         模型类(ORM)
        --tests.py          测试文件
        --views.py          视图函数(******)
    app02
        --migrations文件夹  数据库改动记录
            ----__init__.py
        --__init__.py
        --admin.py          django后台管理
        --apps.py           注册app相关
        --models.py         模型类(ORM)
        --tests.py          测试文件
        --views.py          视图函数(******)
    db.sqlite3              django自带的一个小型用于本地测试的数据库(对日期格式的数据不是很敏感)

容易犯的错误

1.代码修改了始终没有效果
2.在同一个端口起了多个服务 一直跑的是最开始的那个服务
3.浏览器缓存问题

创建app之后一定一定要先去setting文件中注册********

django能够自动重启 但是它的重启机制
    只要检测到你的代码有变化 在一定的时间间隔内就会自动重启
    所以有时候可能会出现 你代码还没写完 就已经自动重启了

django小白必会三板斧

from django.shortcuts import  HttpResponse render redirect
HttpResponse ('字符串')
    返回字符串
render
    返回html页面  并且可以给html页面传数据
    模板的渲染(将数据在后端按照模板语法放入html对应的位置)

redirect
    重定向(原本想访问A但是内部自动给你转到了B上面)
def index(request):  返回一个字符串
        return HttpResponse('你好啊 小妹妹')

    def login(request):
        return render(request,'login.html',{'user_dict':{'username':'jason','password':123},'userxxx':'hello world'})

    def home(request):
        # return redirect('https://www.mzitu.com')
        return redirect('/index')    /index可以是别人网站的全路径,可是自己写的全路径。

原文地址:https://www.cnblogs.com/WQ577098649/p/12150201.html

时间: 2024-11-09 10:46:35

后端框架django的相关文章

后端框架与选择器

后段框架 表单标签: form表单: 关键性属性:        action       控制的数据的提交路径:           1.不写: 默认朝当前页面所在的地址提交                2.全路径:                3.后缀:(/index/)        methon:            控制提交方式            form表单默认是get请求 methon='get'            也可以指定post请求 methon='post'

python框架Django与WSGI

今天学习了一下用简单的Django框架与简单的WSGI服务器配套运行一个简单的Django项目: Django不是完整的web后端框架,它需要和一个WSGI服务器配套,由WSGI服务器负责网络通讯部分. 1.Django与WSGI WSGI全称:Web Server Gateway Interface,是Python定义的WSGI程序和WSGI服务器之间的一种接口 现一个WSGI应用,只需要满足3个要求: 是可调用的,比如是一个函数,或者是一个可调用类(具有__call__方法)的实例 WSGI

python运维开发(十七)----jQuery续(示例)web框架django

内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定 jQuery事件绑定 jQuery循环break jQuery扩展方法 jQuery自定义扩展的方法 jquery扩展实现基本验证 支持是否为空 长度 正则表达式 定义正则表达式 reg = /正则表达式/ ***** g i m ==> 特殊 利用正则匹配 reg.test(字符串) ***** reg.exec(字符串) 全局 非全局字符串三个方法: search match replac

Web框架——Django笔记

Web框架——Django笔记 MVC和MTV MVC:Model.View.Controller MTV:Model.Template.View Django——MTV 1.创建Django程序   (注:创建前需注意配置Django环境变量,python2.7和3.5环境变量) a.命令(使用cmd命令创建) django-admin startproject mysite      创建project cd mysite python manage.py startapp app01  

Python进阶(三十六)-Web框架Django项目搭建全过程

Python进阶(三十六)-Web框架Django项目搭建全过程 ??IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 ??Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! Django 特点 强大的数据库功能 用python的类继承,几行代码就可以拥有一个丰富,动态的数据库操作接口(API),如果需要你也能执行SQL语句. 自带的强大的后台功能 几行简单的代码就让你的网

2017年 JavaScript 框架回顾 -- 后端框架

本文是2017年 JavaScript 框架回顾系列的最后的一篇文章,主要介绍 JavaScript 的后端框架情况. 从上图中可以看到,Express 作为用 JavaScript 编写的后端服务的主流解决方案,占据了后端框架使用率的绝大部分,其次的四个最大框架对比于 Express 来说,占用率都很小. 到目前为止,我们所讨论的几乎所有框架的绝对使用量都在不断增加.自2013年以来,Express 的使用率已经增长了6000%.之所以 Express 的6000%增长在第一张图中显示成下降的

vs2017 + miniUI 后端框架使用

vs2017 +  miniUI  后端框架使用 上miniUI官网直接下载框架.http://www.miniui.com/ 此框架使用说明很清楚. 2.1.vs2017创建安装miniUI后端框架 创建一个新项目,名称:MiniUi_dapper  解决方案名称:UnitiTwo 选择MVC,点击确定,等待一下. 创建完成,一个mvc项目就创建成功,然后我们在引入miniUi的框架. 安装miniUi框架文件,放置对应的目录. 注:当前项目miniUI版本不是最新版本,如需要最新版本可于官方

Celery框架 接口缓存, Celery框架, Django项目实现轮播图缓存更新

接口缓存 """ 1)什么是接口的后台缓存 前台访问后台接口,后台会优先从缓存(内存)中查找接口数据 如果有数据,直接对前台响应缓存数据 如果没有数据,与(mysql)数据库交互,得到数据,对前台响应,同时将数据进行缓存,以备下次使用 了解:前台缓存 - 前台在请求到接口数据后,在前台建立缓存,再发送同样请求时,发现前台缓存有数据,就不再对后台做请求了 2)什么的接口会进行接口缓存 i)接口会被大量访问:比如主页中的接口,几乎所有人都会访问,而且会重复访问 ii)在一定时间内

python框架django中结合vue进行前后端分离

一.创建django项目 1.django-admin startproject mysite # 创建mysite项目 2.django-admin startapp app01# 创建app01应用  二.安装vue 安装vue-cli:npm install -g vue-cli (Vue-cli是Vue的脚手架工具,-g表示在全局下安装vue-cli) 安装webpack: npm install webpack -g  (包管理工具,主要是打包和解包用的) 创建项目:vue init