django前奏
前言
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安装指定版本
- pip安装:
检验django是否安装成功: 命令行执行:
django-admin,有返回结果说明安装成功
命令行创建项目
- 创建django项目 :
django-admin startproject 项目名(如mysite) - 启动django项目:
python manager.py runserver,或者指定ip和端口:python manager.py runserver 127.0.0.1:8000,默认启动在本地8000端口 - 创建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前奏的更多相关文章
- Django框架的前奏(安装及介绍)
几个重要的概念: web的本质: 浏览器中输入网址敲回车发生了几件事? 1.浏览器向服务端发送请求 2.服务端接收请求 3.服务端返回相应的响应 4.浏览器接收响应 根据特定的规则渲染页面展示给用户 ...
- django基础 -- 1. 前奏 web框架的本质
一. http协议 1.请求方法(get和post) 1.GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test ...
- BugPhobia休息篇章:Beta阶段第IX次Scrum Meeting前奏
特别说明:此次Scrum Meeting不计入正式的Scrum Meeting,因此此次工作仅为第IX次Scrum Meeting的前奏,而笔者也首次采用休息篇章作为子命题 0x01 :Scrum ...
- Django框架 之 MTV模型、 基本命令、简单配置
浏览目录 MTV模型 Django框架前奏 Django基础必备三件套 Djaogo基本命令 MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Te ...
- Django models ORM基础操作--白话聊Django系列
上次我们讲完了views视图,那我们这次来看一下Django强大的ORM,可以这么说,你不懂Django的ORM,你就不懂Django,那废话不多说 ORM又称关系对象映射,在ORM里,一张表就是一个 ...
- Django项目之Web端电商网站的实战开发(一)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶电商项目开发流程 三丶项目需求 四丶项目架构概览 五丶项目数据库设计 六丶项目框架搭建 一丶项目介绍 产品 ...
- Django框架——基础之视图系统(View.py)
Django框架之View.py(视图文件) 1. 视图简介 视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面. 它对外接收用户请求,对内调度模型层和模版层,统合数 ...
- 使用django + KindEditor 开发个人博客系统
前奏小知识 1. 通过url参数组合不同的过滤条件 django框架部分 1. 数据结构models from django.db import models # Create your models ...
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
随机推荐
- Linux find 用法和参数
Linux中find常见用法 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数: ...
- RAC ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
重启RAC时发现32004,后来才发现DG已经不存在了standby_archive_dest还在生效中,而background_dump_dest和user_dump_dest并没在pfile中出现 ...
- MySQL数据篇(八)-- 存储过程的简单实现
思考:一般我们的数据都是存储在数据库里面,对于常规的CRUD操作都是用代码实现,比如使用PHP做项目,所有的数据处理都需要主动操作代码实现.如果我们现在有一项目,业务需要在用户下单后,对用户的订单进行 ...
- MyBtis之关于#{}和${}
1.${}的用法的mapper文件配置: </select> <select id="selById2" resultType="com.sus ...
- python模块下载备份
https://pypi.org/ https://pypi.doubanio.com/simple/
- Delphi 任务栏中不显示窗口
目的: 1. 窗口不在任务栏显示. 2. 窗口不显示在Alt+Tab的切换列表中. 3. 在任务管理器的应用程序列表中不显示. 示例: type TAppWndBrowser = class( TFo ...
- 【1期】mysql必知必会
再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她
- 整理几个经常在H5移动端开发遇到的东西。
本篇主要是我个人的学习分享. 1.弹出数字键盘 <!-- 有“#” “*” 符号输入 --> <input type="tel"> <!-- 纯数字 ...
- 面向对象程序设计(JAVA) 第15周学习指导及要求
2019面向对象程序设计(Java) 第15周学习指导及要求(2019.12.6-2019.12.13) 学习目标 (1) 掌握菜单组件用途及常用API: (2) 掌握对话框组件用途及常用API: ...
- UVA 1473 Dome of Circus
https://cn.vjudge.net/problem/UVA-1473 题目 给出一些点,问包含这些点的最小圆锥(要求顶点在y轴,底面圆心在原点)的体积 题解 因为圆锥对称,所以可以把所有点旋转 ...