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的更多相关文章

  1. 全面解读Python Web开发框架Django,利用Django构建web应用及其部署

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  2. 全面解读Python Web开发框架Django

    全面解读Python Web开发框架Django Django是一个开源的Web应用框架,由Python写成.采用MVC的软件设计模式,主要目标是使得开发复杂的.数据库驱动的网站变得简单.Django ...

  3. python Web开发框架-Django (1)

    以前用web.py(另外一款轻量级web开发框架)做一个监控管理平台,没有做特别的记录就不好拾起来.最近做一个日志聚合系统,使用的是django,这次就记下来,方便查询. Django是一个高效的we ...

  4. Python Web开发框架Django

    花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTML ...

  5. 分分钟教你Python Web开发框架Django

    Python除了爬虫.深度学习(人工智能).数据分析等外,还可以用来开发网站系统,如我们常见的知乎,豆瓣等都是用Python开发的网站系统. 今天辰哥就来教大家如何新建属于自己的Django项目,让D ...

  6. python快速开发Web之Django

    以前写测试框架,要么是纯python代码驱动的,要么是WinForm界面的框架,多人操作并不适合. 就想用python写个Web版的,于是想到了Web快速开发的框架Flask和Django两个 个人觉 ...

  7. python open-falcon docker.WEB developers---flask,---django.

    http://www.verydemo.com/demo_c281_i2477.html (python Gevent – 高性能的Python并发框架) http://www.django-rest ...

  8. python Web开发框架-Django (2)

    接上篇文章,介绍一些实用的技巧和注意点.首次用MarkDown编辑,感觉行空隙太大,不是那么好看. GET/POST 前后端会有数据交互,使用JQuery来实现get/post请求 GET 方法1:通 ...

  9. 5个最好的Python Web开发框架

    Python是最受欢迎的和最有效率的开发语言之一.Python能让你更快完成工作,并且更有效地集成系统.Python是动态的面向对象的语言.即便你刚刚开始学习Python,也立即就能获得生产力上的提升 ...

随机推荐

  1. 关于暴力破解的一些学习笔记(pikachu)

    这几天的笔记都懒得发博客都写在本地了,随缘搬上来 什么是暴力破解 就是在攻击者不知道目标账号密码情况下的,对目标系统的常识性登陆 一般会采用一些工具+特定的字典 来实现高效的连续的尝试性登陆 一个有效 ...

  2. 2019-2020-1 20199329《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...

  3. Kubernetes产生背景、核心概念

    Kubernetes是什么 • Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S. • Kubernetes用于容器化应用程序的部署,扩展和管理 ...

  4. phper:敢问路在何方

    很多php程序员存在未来发展方面的困扰,介于各方面的因素,phper 比其他程序员更容易遇到上升天花板. 一方面,一般只有初创企业为了快速实现产品上市以及极容易招到 phper 才使用 php 来实现 ...

  5. js的属性监听

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8">     <title ...

  6. Linux改中文乱码显示

    Linux改中文乱码显示                可以使用locale命令,查看当前系统默认采用的字符集# locale在RedHat/CentOS系统下,记录系统默认使用语言的文件是/etc/ ...

  7. 【JAVA基础】05 Java语言基础:数组

    1. 数组概述和定义格式说明 为什么要有数组(容器) 为了存储同种数据类型的多个值 数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引用 ...

  8. 刚听完CSDN总裁蒋涛先生的学术报告

    主题: 二十年程序人生和我的人才观 第一次参加所谓的"学术报告", 但感觉更多的是蒋总在跟我们分享他个人的成长经验. 按蒋总的话说, 他已经从2000年开始不碰怎么技术了, 所以个 ...

  9. centos6.5宽带拨号上网

    CentOS6以后要安装rp-pppoe这个软件,centos之前的版本是adsl-setup命令安装. (1)查看是否安装 #rpm -qa|grep rp-pppoe 没有内容输出则没安装,若可以 ...

  10. nginx经验分享

    如果我们在使用启动nginx时,遇到这样的提示: nginx: [alert] could not open error log file: open() "/usr/local/var/l ...