zoukankan      html  css  js  c++  java
  • 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:UserswebAppDataLocalProgramsPythonPython38-32libsite-packagesdjangodbackendsmysqlase.py, 注释掉其中的第35/36行

    使用ORM检视MySQL数据库时可能报如下错误2:

    AttributeError: 'str' object has no attribute 'decode'

    解决方案:把Python3已经删除的方法decode改为encode

    C:UserswebAppDataLocalProgramsPythonPython38-32libsite-packagesdjangodbackendsmysqloperations.py,把第146中的decode改为encode

  • 相关阅读:
    html基础知识点
    uni-app之tabBar的自己配置
    uni-app之导航配置pages.json
    js获取链接?后边的参数名称或者值
    验证码输入自动聚焦下一个input或者删除自动聚焦上一个input
    VUE中/deep/深度作用域
    vue环境下新建项目
    vue中展示数据
    VUE环境项目搭建以及简单的运行例子
    ios设置音乐audio自动播放
  • 原文地址:https://www.cnblogs.com/sna-ling/p/12797070.html
Copyright © 2011-2022 走看看