Python的第三方web开发框架Django
1.Django
Django是一个基于Python的第三方Web应用开发框架,可以简化Web开发。
官网:https://www.djangoproject.com/
主要特点:
①采用MVC模型变种:MTV(Model Template View)
②采用ORM映射技术:访问数据库无需编写任何SQL语句
③采用URL分发技术:把客户端请求地址分派给不同的View来处理
使用Django框架的步骤:
①安装正确版本的Python:Django 2.2 必需 Python3+
②下载并安装Django框架
pip install Django
默认安装在: PYTHON主目录/Lib/site-scripts
③使用Django提供的管理工具创建空白项目
django-admin startproject 项目名
④进入空白项目,运行其自带的开发服务器
cd 项目名
python manage.py runserver
⑤使用客户端浏览器测试访问
http://127.0.0.1:8000
注意:如果服务器启动成功,客户端打开等待半天仍无法访问,可能是Windows防火墙没有关闭,关闭系统自带的防火墙即可。
提示:如果使用pip的默认仓库下载第三方模块总出错误,可以切换为国内仓库,例如: pip install 模块名 -i https://pypi.tuna.tsinghua.edu.cn/simple |
Django中下面两个概念不同: ①Project:工程/项目,例如:搜狐门户 ②Application/App:应用,例如:科技频道、旅游频道、房产频道 一个Project可以包含多个App;每个工程都有一个默认App,与工程同名 |
2.配置Django项目中的路由
提示:
客户端路由:Vue/React/Angular中“路由词典”指的是客户端浏览器中输入的地址,对应于哪个客户端中运行的组件模板;
服务器端路由:Django是服务器端框架,其中的“路由词典”指的是客户端发来的请求地址,该由哪个服务器端的方法来处理,最终返回的应该是HTTP响应消息。
#配置路由词典: 主APP/urls.py文件
urlpatterns = [
path( '路由地址', 处理方法 ),
...
path( '路由地址', 处理方法 ),
]
提示:
①路由处理方法在Django中称为“View”——MTV模式中的V
②路由处理方法必须接收一个req参数,返回一个HttpResponse对象
③路由地址可以在中间或尾部添加/;如login/、user/login;但是不应该在开头添加/,如/login
注意:如果项目中有很多的路由,路由方法对应的就有很多,全部写在一个模块中不合适,官方推荐将它们划分到不同的App中,例如:App User、App Product、App Cart....
创建新的Project: django-admin startproject 项目名称 创建新的App: python manage.py startapp 应用名称 |
3.题外篇:如何安装VSCode插件
方式1:在线安装
Ctrl + Shift + X,输入框中搜索即可
方式2:离线安装
设法下载插件对应的安装文件 xxx.vsix
Ctrl + Shift + X,点击右上角的...按钮“更多操作” > 从VSIX安装即可
4.Django中的请求数据处理
①读取客户端提交的QueryString请求数据
请求消息:GET /user/login?uname=dang&upwd=123
读取请求数据:
n = req.GET.get('uname', 'guest')
p = req.GET.get('upwd', '') #有则使用,无则用默认
②读取客户端提交的是请求主体中的数据
请求消息:POST /user/register HTTP/1.1
....
uname=dang&upwd=123
读取请求数据:
n = req.POST.get('uname', 'guest')
p = req.POST.get('upwd', '') #有则使用,无则用默认
③读取请求URL中的“路由参数”数据
请求消息:GET /product/detail/13
GET /product/detail/28
路由配置:path( 'product/detail/<pid>', productDetail )
path( 'product/detail/<int:pid>', productDetail )
路由方法:def productDetail( req, pid ):
#pid参数值就是路由参数的值
----------------------------------------------------------------------
④向客户端返回HTML响应消息
res = HttpResponse('响应消息主体')
res['响应消息头'] = '值'
return res
⑤向客户端返回JSON响应消息——前后端分离的项目
res = JsonResponse( dict或者list ) #此处会自动执行JSON序列化
res['响应消息头'] = '值'
return res
5.Django中的ORM映射技术 —— 重点&难点
提示:一个框架采用ORM技术,那么开发者就无需编写任何SQL语句即可实现数据库操作。
传统的数据库操作存在的问题:
Python中数据是封装好的对象,但是关系型数据库中存储的却是离散的数据;保存数据就需要把封装好的对象“拆散”为离散的数据存储到关系型数据库;读取数据就是把离散的几个数据重新组装为对象。
解决方案:ORM(Object Relation Mapping)
ORM框架原理:ORM框架本身记录对象和关系表间的映射关系,以及属性和列之间的映射关系,用户只需要操作对象,ORM框架会自动生成需要SQL语句,并发送给数据库执行。即:
u2.save( ) #ORM会自动提交INSERT INTO....
u2.delete( ) #ORM会自动提交DELETE FROM....
......
项目中ORM可能呈现的方式有三种:
①用户创建Object Class,用户创建关系数据库中的表,用户再创建映射文件,指定class和table间的映射关系
②正向工程:用户创建Object Class,使用ORM检索这些类,自动生成创建表的SQL并发送给数据库执行
③逆向工程:用户创建数据库表结构,使用ORM检索这些表,自动生成每个表对应的Object Class
咱们的项目目前都已经写好了.sql文件并在数据库中执行了,直接使用方式3“逆向工程”即可生成每个表对应的Class
6.使用Django ORM技术生成类
①使用pip下载并安装MySQL数据库驱动模块(支持ORM技术)
pip install pymysql
pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
②在当前项目主APP初始化时注册该驱动程序
#主APP/__init__.py
import pymysql
pymysql.install_as_MySQLdb( )
③在项目配置文件中声明MySQL服务器连接参数
#主APP/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xz',
'HOST': '127.0.0.1',
'PORT': '3306',
'USER': 'root',
'PASSWORD': '',
}
}
④启动MySQL数据库服务器,确保其中已有需要的关系表
⑤使用Django ORM技术检索数据库中的表,自动生成对应的Class
python manage.py inspectdb #默认生成的class会输出到命令行
python manage.py inspectdb > ./user/models.py #把生成的class输出到指定的Model文件
使用ORM检视MySQL数据库时可能报如下错误1: django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3. 解决方案:取消数据库驱动版本检查;编辑下面文件 C:\Users\web\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\mysql\base.py, 注释掉其中的第35/36行 |
使用ORM检视MySQL数据库时可能报如下错误2: AttributeError: 'str' object has no attribute 'decode' 解决方案:把Python3已经删除的方法decode改为encode C:\Users\web\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\mysql\operations.py,把第146中的decode改为encode |
Python的第三方web开发框架Django的更多相关文章
- 全面解读Python Web开发框架Django,利用Django构建web应用及其部署
全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...
- 全面解读Python Web开发框架Django
全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...
- python Web开发框架-Django (1)
以前用web.py(另外一款轻量级web开发框架)做一个监控管理平台,没有做特别的记录就不好拾起来.最近做一个日志聚合系统,使用的是django,这次就记下来,方便查询. Django是一个高效的we ...
- Python Web开发框架Django
花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTML ...
- 分分钟教你Python Web开发框架Django
Python除了爬虫.深度学习(人工智能).数据分析等外,还可以用来开发网站系统,如我们常见的知乎,豆瓣等都是用Python开发的网站系统. 今天辰哥就来教大家如何新建属于自己的Django项目,让D ...
- python快速开发Web之Django
以前写测试框架,要么是纯python代码驱动的,要么是WinForm界面的框架,多人操作并不适合. 就想用python写个Web版的,于是想到了Web快速开发的框架Flask和Django两个 个人觉 ...
- python open-falcon docker.WEB developers---flask,---django.
http://www.verydemo.com/demo_c281_i2477.html (python Gevent – 高性能的Python并发框架) http://www.django-rest ...
- python Web开发框架-Django (2)
接上篇文章,介绍一些实用的技巧和注意点.首次用MarkDown编辑,感觉行空隙太大,不是那么好看. GET/POST 前后端会有数据交互,使用JQuery来实现get/post请求 GET 方法1:通 ...
- 5个最好的Python Web开发框架
Python是最受欢迎的和最有效率的开发语言之一.Python能让你更快完成工作,并且更有效地集成系统.Python是动态的面向对象的语言.即便你刚刚开始学习Python,也立即就能获得生产力上的提升 ...
随机推荐
- 浅谈 PHP 与手机 APP 开发
来源:http://www.thinkphp.cn/topic/5023.html 一.先简单回答两个问题: 1.PHP 可以开发客户端?答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 ...
- Linux网络服务第七章DNS域名解析服务
端口:53 一.DNS服务器 正向解析:根据域名查IP地址,即将指定的域名解析为相对应的IP地址.域名的正向解析是DNS服务器最基本的功能,也是最常用的功能. 反向解析:根据IP地址查域名,即将指定的 ...
- Centos 6.5升级gcc : 源码安装 + rpm安装
1. 前言 采用Centos 6.5默认的gcc版本为4.4.7,不支持c++ 11,需要升级: 首先想到用yum命令:执行yum update gcc-c++或yum update g++ 显示没有 ...
- 数据库SQL语言从入门到精通--Part 4--SQL语言中的模式、基本表、视图
数据库从入门到精通合集(超详细,学习数据库必看) 前言: 使用SQL语言时,要注意SQL语言对大小写并不敏感,一般使用大写.所有符号一定是西文标点符号(虽然是常识,但我还是提一嘴) 1.模式的定义与删 ...
- 禅道部署(基于 Linux)
1. 查看 Linux 服务器是 32位 还是 64位 的 getconf LONG_BIT 2. 禅道开源版安装包下载 下载站点1:# wget http://sourceforge.net/pro ...
- 【Elasticsearch学习】之基础概念
Elasticsearch是一个近实时的分布式搜索引起,其底层基于开源全文搜索库Lucene:Elasticsearch对Lucene进行分装,对外提供REST API 的操作接口.基于 ES,可以快 ...
- python安装pycrypto库
使用pycharm时安装pycrypto库,一直安装不上,提示安装成功,退出去一看,依旧没有 最后选择了pip安装,但一直报错(Microsoft Visual C++ 9.0 is required ...
- print函数的全面认识
# 输出打印 数字 print(123) a = 100 print(a) # 输出打印 字符串 print('字符串123') print('''锄禾日当午 汗滴禾下土''') # 输出打印 列表 ...
- 【Swift】获取UILabel中点击的某个功能标签文字并作出响应动作
1.需求 首先.针对UILabel中显示的多个功能标签,作出颜色标记提示. 其次.对关键字作出点击响应动作. 如图所示: 解决: 1.使用正则匹配到关键字 public static var hash ...
- LeetCode--Squares of a Sorted Array && Robot Return to Origin (Easy)
977. Squares of a Sorted Array (Easy)# Given an array of integers A sorted in non-decreasing order, ...