python web开发第三方库_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,与工程同名

1820850-20200428213613898-479367910.png

2.配置Django项目中的路由

提示:

客户端路由:Vue/React/Angular中“路由词典”指的是客户端浏览器中输入的地址,对应于哪个客户端中运行的组件模板;

服务器端路由:Django是服务器端框架,其中的“路由词典”指的是客户端发来的请求地址,该由哪个服务器端的方法来处理,最终返回的应该是HTTP响应消息。

1820850-20200428213715341-1666582311.png

#配置路由词典: 主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/', productDetail )

path( 'product/detail/', 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语句即可实现数据库操作。

传统的数据库操作存在的问题:

1820850-20200428214118856-927494581.png

Python中数据是封装好的对象,但是关系型数据库中存储的却是离散的数据;保存数据就需要把封装好的对象“拆散”为离散的数据存储到关系型数据库;读取数据就是把离散的几个数据重新组装为对象。

解决方案:ORM(Object Relation Mapping)

1820850-20200428214126179-569117865.png

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值