前言

Web框架本质

所谓的web框架就是一个C/S架构。

我们可以用socket来编写我们的服务端,那么客户端是我们的浏览器,当我们访问服务器资源的时候,服务器接收到请求,但是无法响应给客户端。

这是因为要发送的数据没有遵循http协议,在服务端添加http协议头之后可以进行访问

那么我们如果在网址后面加参数,比如127.0.0.1:8080/index 类似这种的,服务器也无法响应了,这时候我们可以利用wsgiref这个模块来接收客户端的参数获取用户的url参数信息,根据这个参数信息,我们可以定义一个urls.py路由文件,帮我们任务的分发,分发到views.py视图函数中,

视图函数中利用三板斧可以发送给前端信息,最终展示给客户端。

我们可以这样理解:所有的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开发环境用的就是这个模块来做服务器。

基于第三方模块实现Web框架

需要用到:

  • views.py:视图层,放置功能函数(视图函数)
  • urls.py:路由层,放的是路径后缀与视图函数的对应关系
  • templates:模板层,放的全是html文件

Python三大主流Web框架

django

大型的框架,自带的组件和功能非常多

类似于航空母舰

强大的功能之外不足之处:比较笨重

  • socket服务器部分用的是别人的wsgiref
  • 路由层自己实现
  • 模板语法自己实现

flask

短小精悍,自带组件非常少

基本全部依赖于第三方组件

如果将flask所有第三方模块加起来,可以盖过django

  • socket服务器部分用的第三方模块werkzeug
  • 路由层自己实现
  • 模板语法利用第三方模块Jinja2

tornado

异步非阻塞的一个框架,可以用来开发游戏服务器,效率非常非常高。

  • socket服务器自己实现
  • 路由层自己实现
  • 模板语法自己实现

Django框架介绍

安装

安装Django之前注意:

  1. 计算机名称不能有中文
  2. python解释器不要使用3.7版本 推荐使用版本3.4~3.6
  3. 一个pycharm窗口 只能跑一个项目
  4. 版本尽量安装稳定版,本教程将以1.11.11版本为主。

安装直接用pip安装即可

pip3 install django==1.11.11

如何检验django是否安装成功

命令行敲 django-admin

创建项目

命令行创建项目:

django-admin startproject 项目名(例如mysite)

pycharm创建项目:

创建App

python3 manage.py startapp app01

django是一个以开发app为主要功能的web框架

app就是application应用的意思

一个django项目就是一所大学(空的架子 本身没有任何功能),而app就类似于大学里面的各个学院。

一个app就对应一个具体的功能模块。

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

注意

1.使用命令行创建项目不会自动帮你创建templates文件夹

2.配置文件中不会自动帮你书写templates文件路径

3.setting配置文件中也不会自动帮你加app,不会生效

setting配置文件:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config', # 如果新建的app没有,这里要加上
] TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,"templates")], # 如果这里的路径是空的,要手动加
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

目录介绍

mysite/
├── manage.py # 管理文件
└── mysite # 项目目录
├── __init__.py
├── settings.py # 配置
├── urls.py # 路由 --> URL和函数的对应关系
└── wsgi.py # runserver命令就使用wsgiref模块做简单的web server

运行项目

python manage.py runserver 127.0.0.1:8000

Django基础必备三件套

from django.shortcuts import HttpResponse,render,redirect

HttpResponse

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

例如:

def index(request):
# 业务逻辑代码
return HttpResponse("正常访问了")

render

可以接收多个参数

第一个参数接收request

第二个参数填写一个待渲染的模板文件(html文件)

第三个参数写一个保存具体数据的字典

意思是将数据填充进模板文件,最后将结果返回给浏览器,类似于Jinja2模板,注意,这里的reder使用的模板语法,在html文件中可以使用python的字典语法取值,是python后端处理完成之后再发送到html的,最后才将结果返回给浏览器。

例如:

def index(request):
# 业务逻辑代码
return render(request,"index,html",{"name":"qinyj","hobby":["run","jump"]})

redirect

接收一个URL参数,意思是可以重定向到指定的URL地址

例如:

def index(request):
# 业务逻辑代码
return redirect("https://www.baidu.com")

Django简介以及安装的更多相关文章

  1. Django简介及安装

    Django简介及安装 我们都知道,Django是一种基于Python的Web开发框架. 那么,什么是Web开发?Web开发指的是开发基于B/S架构,通过前后端的配合,将后台服务器的数据在浏览器上展现 ...

  2. python框架Django简介与安装

    Django简介 关注公众号"轻松学编程"了解更多. 发布于2005年,最负盛名且成熟的Python网络框架 最初用来制作在线新闻的Web站点 开源Web框架,遵守BSD协议 BS ...

  3. Django简介和安装

    Django 最开源地方就是可以使用强大第三方插件1,Django默认没有提供对象(Object)级别的权限控制,我们可以通过该Django Guardian 扩展来帮助Django实现对象级别的权限 ...

  4. Django简介、安装和入门

    python三大主流Web框架 Django 优点:大而全,自身携带的组件和功能特别特别多,类似于航空母舰 缺点:过于笨重,所需功能不多时,Django依然提供这些功能,占据内存 Flask 优点:小 ...

  5. Django 初识之安装下载以及模型目录简介

    Django 一.web应用 web应用什么 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 应用程序有两种模式 ...

  6. python Django教程 之 安装、基本命令、视图与网站

    python  Django教程  之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...

  7. Django简介

    Django, 应该读作jan go,读音演示 D是不发音的---发音的---音的---的--- django简介:urls.py网址入口,关联到views.py views.py处理用户发出的请求, ...

  8. Django 2.0 学习(01):Django初识与安装

    Django(Python Web框架) Django是一个开放源代码的Web框架,用Python写的.采用了MTV的框架模式,即模型M,模板T和视图V.它最初被开发是用来管理以新闻内容为主的网站,即 ...

  9. Django之web应用、http协议和django简介

    等了好久终于等到今天,盼了好久终于把梦实现,啦啦啦.....学习python两个多月了,终于等到python的高潮,老师说要是把Django学会了,python的web开发就差不多了,也相当于迎来了p ...

随机推荐

  1. C4D中python初探

    use_name = input('请输入账号') password = input('请输入密码') if use_name == 'alex' and password == 'alex3714' ...

  2. sklearn数据集划分

    sklearn数据集划分方法有如下方法: KFold,GroupKFold,StratifiedKFold,LeaveOneGroupOut,LeavePGroupsOut,LeaveOneOut,L ...

  3. C++数据类型之字符串类型&布尔类型&数据的输入

    字符串型 **作用**:用于表示一串字符 **两种风格** 1. **C风格字符串**: char 变量名 [ ]  =  "字符串值" 2.**C++风格字符串**:  stri ...

  4. 【72. 编辑距离】【困难】【线性DP】

    给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输 ...

  5. 常见PID里面的像素大小

    因为tensorflow/models里faster R-cnn目前识别的好像是按照像素比上图片大小来识别的,所以在这里统计一下各个元件的像素大小的范围 DCS:70~200

  6. luaj使用 方法签名规则 Cocos2dxLuaJavaBridge

    function AndroidHandler:getParamJson()     local args = {nil}     local ok,ret = luaj.callStaticMeth ...

  7. 用多线程发送邮箱(一次给一个用户发送N封邮件)

    前台不用写,后台执行方法就可以了. namespace SendMail { public partial class SendMail_Page : System.Web.UI.Page { pro ...

  8. 使用navicat 使用IP、用户名、密码直接连接linux服务器里面的数据库

    一般新申请的服务器,没有开通3306端口的吧,反正我遇到的,要用Navicat去连接linux下的数据库,都必须填写两个地方的信息,才能链接成功. 如果想要只通过填写ip还有数据库用户名还有密码就可以 ...

  9. RAKsmart新出香港服务器的优势

    RAKsmart为了更好地服务用户,所以最近RAKsmart新推出得香港服务器又带给了用户更多的选择,那这次RAKsmart新推出香港服务器有哪些优势呢? 1.带宽更大可升至10Mpbs 香港服务器的 ...

  10. ransformResourcesWithMergeJavaResForDebug问题

    错误内容: Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > java.i ...