前言

web框架本质

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

服务器程序和应用程序

对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。

服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。

应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。

这样,服务器程序就需要为不同的框架提供不同的支持。这样混乱的局面无论对于服务器还是框架,都是不好的。对服务器来说,需要支持各种不同框架,对框架来说,只有支持它的服务器才能被开发出的应用使用。

这时候,标准化就变得尤为重要。我们可以设立一个标准,只要服务器程序支持这个标准,框架也支持这个标准,那么他们就可以配合使用。一旦标准确定,双方各自实现。这样,服务器可以支持更多支持标准的框架,框架也可以使用更多支持标准的服务器。

WSGI(Web Server Gateway Interface)就是一种规范,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。

常用的WSGI服务器有uwsgi、Gunicorn。而Python标准库提供的独立WSGI服务器叫wsgiref,Django开发环境用的就是这个模块来做服务器。

python三大主流web框架

django

大型框架,自带的组件和功能非常多;不足之处就是写小项目时,可能会很笨重

  • socket部分用的别人的wsgiref(django默认的)
  • 路由匹配自己写的
  • 模板语法是自己写的

flask

小而精 短小精悍 自带的组件和功能特别特别少 ,基本全部依赖于第三方组件

不足之处: 受限于第三方模块的影响比较大

如果将flask所有第三方模块加起来 能够直接盖过django

  • socket部分用的别人的werkzeug
  • 路由匹配自己写的
  • 模板语法用的别人的jinja2

torndao

特点:异步非阻塞 这个框架甚至可以用来开发游戏服务器

socket、路由匹配、模板语法都是自己写的

Django安装配置

注意事项

  • 计算机名称不能有中文
  • python解释器不要使用3.7版本,推荐使用3.4-3.6版本
  • 一个pycharm窗口 只能跑一个项目
  • django版本使用1.11

  • 安装django指定版本 两种方法

    • pip安装:pip install django==1.11.11
    • pycharm安装指定版本
  • 检验django是否安装成功: 命令行执行:django-admin,有返回结果说明安装成功

命令行创建项目

  1. 创建django项目 :django-admin startproject 项目名(如mysite)
  2. 启动django项目:python manager.py runserver,或者指定ip和端口:python manager.py runserver 127.0.0.1:8000,默认启动在本地8000端口
  3. 创建app应用(django支持多app开发):python manager.py startapp app01

app的概念

django是一个以开发app为只要功能的web框架,app就是application应用的意思

一个django项目就相当于一所大学,而一个个app相当于大学里的学院。

而 一个空的django项目本身没有任何作用,仅仅为app提供前期的环境配置,app才是一个个具体的功能,每个app都有自己独立的功能。

注意:创建好的app需要在django配置文件中注册方可生效:

# 在配置文件settings.py中配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01', # 简易写法
'app01.apps.App01Config' # 完整写法
]

命令行传创建项目注意:

  • 不会自动创建templates文件夹,需要手动创建
  • templates路径需要手动添加到配置文件中'DIRS': [os.path.join(BASE_DIR, 'templates')]

pycharm创建项目

Tools >>> run manage.py task

这样就会生成一个专门敲django命令的窗口

注意:

  • 一定要确保同一个端口 同一时间只能启一个django项目
  • templates路径如果没有,需要手动添加到配置文件中'DIRS': [os.path.join(BASE_DIR, 'templates')]

目录结构

mysite/
├── manage.py # django的入口文件
├── templates # 模板文件夹,存放html文件
├── db.splite3 # django自带的数据库文件
└── mysite # 项目目录
├── __init__.py
├── settings.py # 暴露给用户可以配置的配置文件
├── urls.py # 路由 --> URL和函数的对应关系
└── wsgi.py # runserver命令就使用wsgiref模块做简单的web server
├── app01 # 应用文件夹名
├── migrations文件夹 # 所有数据库相关的操作记录
├── __init__.py
├── admin.py # django admin后台管理
├── apps.py # 注册qpp使用
├── models.py # 放数据库相关的模型类
├── tests.py # 测试文件
├── views.py # 处理业务逻辑的视图函数

django基础必备三板斧

主要操作views.py和urls.py

HttpResponse

内部传入一个字符串参数,返回给浏览器

from django.shortcuts import render, HttpResponse, redirect
def index(request):
return HttpResponse('有点意思')

render

render可以返回html文件,可以给html页面传值

def login(request):
user_dic = {'username': 'neo', 'password': '123'}
return render(request, 'login.html', {'user_dic':user_dic})

redirect

重定向,接受一个URL参数,表示跳转指定的URL。

可以是后缀名,也可以是全路径

def home(request):
return redirect('/index')
# return redirect('https://coding.net/')

django前奏的更多相关文章

  1. Django框架的前奏(安装及介绍)

    几个重要的概念: web的本质: 浏览器中输入网址敲回车发生了几件事? 1.浏览器向服务端发送请求 2.服务端接收请求 3.服务端返回相应的响应 4.浏览器接收响应  根据特定的规则渲染页面展示给用户 ...

  2. django基础 -- 1. 前奏 web框架的本质

    一. http协议 1.请求方法(get和post) 1.GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test ...

  3. BugPhobia休息篇章:Beta阶段第IX次Scrum Meeting前奏

    特别说明:此次Scrum Meeting不计入正式的Scrum Meeting,因此此次工作仅为第IX次Scrum Meeting的前奏,而笔者也首次采用休息篇章作为子命题   0x01 :Scrum ...

  4. Django框架 之 MTV模型、 基本命令、简单配置

    浏览目录 MTV模型 Django框架前奏 Django基础必备三件套 Djaogo基本命令 MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Te ...

  5. Django models ORM基础操作--白话聊Django系列

    上次我们讲完了views视图,那我们这次来看一下Django强大的ORM,可以这么说,你不懂Django的ORM,你就不懂Django,那废话不多说 ORM又称关系对象映射,在ORM里,一张表就是一个 ...

  6. Django项目之Web端电商网站的实战开发(一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶电商项目开发流程 三丶项目需求 四丶项目架构概览 五丶项目数据库设计 六丶项目框架搭建 一丶项目介绍 产品 ...

  7. Django框架——基础之视图系统(View.py)

    Django框架之View.py(视图文件) 1. 视图简介 视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面. 它对外接收用户请求,对内调度模型层和模版层,统合数 ...

  8. 使用django + KindEditor 开发个人博客系统

    前奏小知识 1. 通过url参数组合不同的过滤条件 django框架部分 1. 数据结构models from django.db import models # Create your models ...

  9. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

随机推荐

  1. Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结

    Bootstrap时间日历插件bootstrap-datetimepicker配置与应用小结   by:授客 QQ:1033553122 1.   测试环境 win7 JQuery-3.2.1.min ...

  2. 别不信!servlet获取到的参数值,也许完全出乎你的意料!

    先贴出来简单得不能再简单的demo页面效果: 如下是spring mvc的Controller: @RequestMapping("mytest") @Controller pub ...

  3. python配置yaml

    我们在做自动化的过程中无论是接口自动化还是UI自动化都会存在很多数据,我们对于自动化中如何存放这些数据也是很重要一点,如果写在代码里的话,每次更换数据就有点繁琐,我们可以通过一个文件存放这些数据,然后 ...

  4. AcWing 801. 二进制中1的个数

    网址 https://www.acwing.com/solution/AcWing/content/2066/ 题目描述给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数. 算法1主要 ...

  5. AcWing 32. 调整数组顺序使奇数位于偶数前面

    习题地址 https://www.acwing.com/solution/acwing/content/2921/ 输入一个整数数组,实现一个函数来调整该数组中数字的顺序. 使得所有的奇数位于数组的前 ...

  6. LG5196 「USACO2019JAN」Cow Poetry 背包+乘法原理

    \(\mathrm{Cow Poetry}\) 问题描述 LG5196 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表到第\(i\)位时,结尾为\(j ...

  7. 【洛谷4173】残缺的字符串(重拾FFT)

    点此看题面 大致题意: 有一个长度为\(n\)的字符串\(A\)和一个长度为\(m\)的字符串\(B\),其中存在一些字符'*'可以与任意字符匹配.求\(B\)中所有满足条件的位置,使得从这一位置开始 ...

  8. 【AtCoder】AtCoder Grand Contest 039 解题报告

    点此进入比赛 \(A\):Connection and Disconnection(点此看题面) 大致题意: 给你一个字符串,将它重复\(k\)次.进行尽量少的操作,每次修改一个位置上的字符,使得不存 ...

  9. 数位DP入门详解+题目推荐

    \(update:2019-9-6\) 博客里某些东西没有解释清楚,完善了对应的解释 在开始之前,我们先来看一道题--题目链接 题目要求,相邻两位的差大于等于2,那么我们先来构造一个试一试. 比如说\ ...

  10. SVO稀疏图像对齐代码分析

    SVO使用稀疏直接法计算两帧之间的初始相机位姿,即使用两帧之间稀疏的4*4 patch的光度误差为损失函数,使用G-N优化算法获得两帧之间的位姿变换,由于没有特征匹配过程效率较高.相比自己实现的稀疏直 ...