IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]使用Visual Studio 2015开发Python Django

    u010019717发表于 2016-06-24 23:07:22
    love 0

    孙广东   2016.6.24

    http://blog.csdn.net/u010019717

    VS 本身就是全宇宙最强的开发工具,  微软官方开发和维护者.Net版的 python .  IronPython  。 开发python强大到折服!

         安装vs2015时要选择 python的扩展插件, 如果没有就更新安装。


             面向Python 的最流行(且功能最强大)的开源 Web 开发平台 - Django。创建数据驱动的动态应用程序。探讨 Django 中提供的对象关系映射 (ORM)系统,并了解如何确保您的页面可被搜索引擎发现。

    Django 的特性:

    有模板和 众多布局方式

    自带对象关系映射(ORM)

    网站管理

    安全

    容易理解

    非常强大

    http://blog.csdn.net/u010019717

    建项目:

    1、visualStudio  2015 新建项目  选择   (如果Djongo 版本超过1.7 ,那么PTVS插件要不低于2.2.3)

    2、然后选择  Install into a visual environment….

    3、然后使用默认的点击 创建就行了!

     

    创建完之后, 第一个提示页面是:

    E:\ku\Documents\Visual Studio2015\Projects\DjangoWebProject1\DjangoWebProject1\readme.mht  一些提示说明

     

    看一下 项目相关的 管理 (突然觉得使用 vs 开发简直是碉堡了!!!)

     

             其中框住的虚拟环境,是我们 创建项目的时候第3步的结果, 可以删除然后再点击下面的按钮  重新添加!

     

     

    运行程序,  会打开浏览器  然后看到这个项目的页面等等,  但是并没有 管理员啊 什么的?  那时因为我们没有  Django Sync DB  

    1. 设置管理员用户名  然后 yes
    2. 输入 user name, email and password

    再次运行 程序 就会看到 管理员的选择, 然后 登陆这个账号看看!

     

    注意  :但是会遇到这个问题。  解决方式:  升级这个VS插件  , 微软的更新是很及时的!(项目也要重新创建 )

    http://www.aichengxu.com/view/61299  

    那么创建超级账户的过程:

     

    运行程序、  登陆刚刚的 管理员账号!

    http://blog.csdn.net/u010019717



    关于ORM的百科:

    http://baike.baidu.com/link?url=3NMX3E1RWMzDXTlDldWrkYIJ4JYVuCaEvsMIWmQW9JuJj6_WhomrHoVtqI5v8BTLu4ZfsvxckhwbucMduxFRb_

     

    提供的数据库字段还是很多的

    http://www.docin.com/p-536331306.html

     

    这里只说最常见的两种:

     

    有了基础概念,  就开始一个Demo吧!    打开文件  。

    输入代码:

    from django.db import models

    # Create your models here.

     

    class Artist(models.Model):

        name = models.CharField(max_length = 50)

        year_formed =models.PositiveIntegerField();

     

    class Album(models.Model):

        name = models.CharField(max_length = 50)

     

         关于数据表的介绍:

    每个数据表都应该有一个key

    这个key通常是id, 自动生成的数字

    Django自动处理这些

     

     

    创建表之间的关系。

             如果 Artist 是 有 Album的(艺术相册/专辑),  Django 使用 models.ForeignKey 创建关系!

    class Album(models.Model):

        name = models.CharField(max_length = 50)

        artist = models.ForeignKey(Artist)

     

    关于 视图上名字的显示问题:

     Django自动显示label属性到视图上,  "_"符号被换成了“ ”空格。

     默认情况下显示的字段名称是依据 models.py 中的字段名来显示的。

    如果想要定制 label:

    verbose_name 可以让你定制名字;

    必须以小写字母开始

     

    下面要做的就是自定义字段在后台的显示名称(比如显示为中文)。

            对于普通字段:

    name = models.CharField(u'软件名称',max_length=200)

           对于 OneToOneField, ForeignKey 及 ManyToManyField :

    foo= models.OneToOneField(Foo, verbose_name=u'foobar')

    software = models.ForeignKey(SoftWare,verbose_name=u'软件名称')

    author = models.ManyToManyField(Author,verbose_name=u'作者')

     

    Django的数据库 支持  SQLite \ MySQL \ SQL .    默认为开发者提供的是SQLite 

    可以在  setting.py  中指定并设置  。

     

    那么如何创建 database   三种命令方式:

    • makemigrations            创建一个新的 migrate

    pythonmanage.py makemigrations --name initial app

    • sqlmigrate           显示 SQL状态
    • migrate             更新数据库到一个指定的 migrate包中

     

    那么怎么启动命令行呢?

    项目上  右键 选择 - 》  Open Command Prompt Here…    然后 出入命令:

    再执行命令  :  pythonmanage.py showmigrations app

    app

     [ ] 0001_initial

     

    再执行命令  :  pythonmanage.py sqlmigrate  app  0001_initial

     

    再执行命令  :  pythonmanage.py migrate  

     


    http://blog.csdn.net/u010019717

    1、】创建和更新数据

    创建并保存对象到数据库的方式“

    newArtist = Artist(name ='Artist Name', year_formed = 2015);

    newArtist.save();

    只要继承自Model类  就有 save() 方法;

     

    更新对象的数据, 也很简单 Python的OEM会自动弄, 只需要使用save() 方法即可!

    newArtist.name = 'Updated Name';

    newArtist.save();

    可以才命令行中执行测试:

    通过 Django的ORM 获取数据!

     objects 集合, 每个类会从Model类继承 objects 

    # 使用 all() 检索所有对象

    allArtists =Artist.objects.all();

    for artist in allArtists:

        print(artist.name);

       

    # 使用Get(ID)检索特定ID的对象

    allArtists =Artist.objects.all();

    for artist in allArtists:

        print(artist.name);

     

    Django 提供了 两个主要的方法:

    • get       只返回一个对象,    如果你返回0个或者超过1个,会报错
    • filter      返回多个对象,     允许更多复杂的查询

     

    例如, 你想通过名字查找:

    artist = Artist.objects.get(name= 'Artist Name');

     

    例如, 你只知道名字的一部分(模糊查询?)

    artist =Artist.objects.filter(name__startswith = 'Great');

     

    get 总是期待精确匹配

    artist = Artist.objects.get(name= 'Artist Name');

    上面的查询是与以下相同

    artist =Artist.objects.get(name__exact = 'Artist Name');

     

    从 artist 中加载所有的 albums 怎么办???

    Django 允许使用对象链(使用ForeignKey定义的关系)的方式 查询

    创建要给筛选,  使用 object_property 

    albums = Album.objects.filter(artist__name= 'Artist Name');

     

    这里推荐一个工具  :  浏览 SQLite中的数据:

    http://sqlitebrowser.org/ 


    http://blog.csdn.net/u010019717


    路由的概念:

            正如我们看到的,现在产生的 URL地址都很丑陋,既不便于记忆,也不便于被搜索引擎收录。所以我们需要对 URL 进行美化。

      革命性的 URL 路由

      正向解析

     

      通过浏览器访问诸如 http://qeephp.com/projects/qeephp 这样的 URL 时,实际访问的是 projects 控制器的 show 动作,并且附带了参数 name=qeephp。

     

      将这样一个 URL 解析为 MVC 模式需要的控制器名和动作名参数的过程称为正向解析。这个功能在大多数框架中都具备,只是强弱问题。

     

      反向解析

     

      在前面章节中反复出现的一个函数 url() 是专门用来自动创建 URL地址的函数。这个函数接受两个参数:UDI 和可选参数。UDI 用一种规范的形式指定了这个 URL 将要调用的控制器、动作,而可选参数则会附加在 URL中进行传递。

     

      在应用程序的 URL 路由没有启动时,url() 的效果如下:

      url('tasks/create')

      // 结果为index.php?controller=tasks&action=create

      url('tasks/edit', array('task_id' =>2))

      // 结果为index.php?controller=tasks&action=edit&task_id=2

     

      而启用 URL 路由后,url()的效果如下:

      url('tasks/create')

      // 结果为 /tasks/create

      url('tasks/edit', array('task_id' =>2))

      // 结果为 /tasks/edit/2

     

      如果我们修改了路由规则,则效果可能是:

      url('tasks/create')

      // 结果为 /create-new-tasks

      url('tasks/edit', array('task_id' =>2))

      // 结果为 /edit-my-task/2

     

      也就是说 url() 函数的结果取决于应用程序的配置和路由规则。

      这带来的好处包括:

      在不同环境下,只需要启用或关闭 URL 路由,就能保证应用程序正常工作

      修改路由规则表就可以获得不同的 URL 地址,完全不需要修改代码和视图

      从 url() 指定参数获得 URL 的过程就是“反向解析”。

     

                简而言之,django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系。使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从而返回给客户端http页面数据。

     

     

    一、最基础的url映射(使用了Python的正则表达式)

    urls.py

     

    from django.conf.urls importinclude, url

    from django.contrib import admin

    from app01 import views

     

    urlpatterns = [

         url(r'^admin/', admin.site.urls),

         url(r'^index/$', views.index),

    ]

    1、先从创建的app下的views.py面定义处理数据的函数

    2、在urls.py里导入views

    3、在urlpatterns里写入一条url与处理函数的l映射关系

    4、url映射一般是一条正则表达式,“^” 字符串的开始,“$“ 字符串的结束

    5、当写成”^$“时,不输入任何url时不会在返回黄页,而是返回后面函数里对应的页面。一般这一条会写在url的最后。如:

     

    url(r'^$',views.index),

     

    二、按照顺序放置的动态路由

    urlpatterns = [

         url(r'^user/(\d+)$', views.user),

         url(r'^user_list/(\d+)/(\d+)$',views.user_list),

     ]^user/(\d+)$

               相对应的url是: ”http://127.0.0.1/uer/8“ (\d+)是匹配任意的数字,在分页时灵活运用。

     

    ^user_list/(\d+)/(\d+)$

     

               相对应的url是: ”http://127.0.0.1/uer/8/9“,匹配到的数字会以参数的形式按照顺序传递给views里面相对应的函数

     

     def user_list(request,nid,nid2):

          return HttpResponse(nid+nid2)

     

    三、传参形式的动态路由

    利用正则表达式的分组方法,将url以参数的形式传递到函数,可以不按顺序排列。

     

     urlpatterns = [

        url(r'^user_list/(?P<v1>\d+)/(?P<v2>\d+)$',views.user_list),

     ](?P<v1>\d+)

     

    正则表达式的分组,相当于一个字典, key=v1, value=\d+。{"v1":"\d+"}

    然后将此参数传递到views里对应的函数,可以不按照顺序

     

     def user_list(request,v2,v1):

         return HttpResponse(v1+v2)参数v1 =(?P<v1>\d+)

    参数v2 =(?P<v2>\d+)

     

    四、根据不同的app来分发不同的url

     

    如果一个项目下有很多的app,那么在urls.py里面就要写巨多的urls映射关系。这样看起来很不灵活,而且杂乱无章。

     

    我们可以根据不同的app来分类不同的url请求。

     

    首先,在urls.py里写入urls映射条目。注意要导入include方法

     

     from django.conf.urls import include, url

     from django.contrib import admin

     urlpatterns = [

         url(r'^app01/', include('app01.urls')),

     ]

    这条关系的意思是将url为”app01/“的请求都交给app01下的urls去处理。

    其次,在app01下创建一个urls.py文件,用来处理请求的url,使之与views建立映射

     

     from django.conf.urls import include, url

     from app01 import views

     urlpatterns = [

         url(r'index/$', views.index),

     ]

    想对于url请求为: "http://127.0.0.1/app01/index/"

     

    布局和表单

    使用模板:

           Django模板即使 HTML, 他们的存放路径是:templates文件夹下  ?????????

    如何指定一个模板: 

     

     

    http://blog.csdn.net/u010019717


    最后转载一篇   极客头条的 文章:

             又一个Python开发利器!http://ms.csdn.net/geek/80930

    以下将说明六项 Visual Studio 整合开发 Python 程序之优势功能。

    • 整合 Python 直译器 (Interpreter) & 互动视窗 (Interactive)
    • 整合 Python 虚拟开发环境 (Virtual Environment)
    • 整合 Python 套件管理员 (Package Manager)
    • IntelliSense 对 Python 完整的支持
    • 对 Python 使用侦错模式 (Debugging)
    • 跨平台远端侦错 (Remote Debugging)

    整合 Python 直译器 (Interpreter) & 互动视窗 (Interactive)

    Visual Studio 高度整合 Python 直译器,让您能够在开发过程中切换不同版本的 Python 直译器。此项功能除了能够切换至您所熟悉的 Python 版本进行开发外,更可确保您的程序在不同 Python 版本下运行的函式相容性是合法的,如下图代码当中的 print 函式,在 Python 2.7 环境下为合法的 (红色箭头指向目前为使用 Python 2.7 全域环境直译器)。

    Python

    若您的系统有安装不同版本的直译器,将会替您整合至 Visual Studio 当中供您选择。如您安装直译器的路径非预设路径或欲自订直译器函示库、直译器位元时,您亦可自行于 Visual Studio 新增自订直译器。

    接着我们示范切换至不同版本的 Python 环境,这里以切换至 Python 3.5 为例。

    Python 3.5

    此时会发现 Visual Studio 自动侦测到非该环境版本所支持的函式,透过下引号提示使用者错误的代码片段,提供使用者快速寻找出不同版本间不相容之处,以便快速进行修正工作。

    Python

    并提供于 Visual Studio 内启动不同版本的互动 (Interactive) 视窗,就像以往在 Python 命令列下做的事情一样,此互动视窗提供您进行初步撰写、测试,以及验证您设计想法的一个简易执行环境。

    Python 命令

    整合 Python 虚拟开发环境 (Virtual Environment)

    Visual Studio 提供完整的 Python 虚拟环境来为不同项目提供独立的 Python 执行环境,如此一来可避免多个项目间彼此共用一个全域环境使得有太多与该项目不相关的套件在环境中,增加开发环境的複杂度。或者您能够在不同环境中安装不同版本的套件,以便测试在不同的版本中所使用到套件的函式是否有不一样之处。

    如下图,我们创建多个虚拟环境,用此来安装不同版本的套件以进行相容性测试,而创建出来的虚拟环境能于稍后提供给其他项目使用,减少安装及创建环境所花费冗馀的设定时间。

    虚拟环境

    在创建虚拟环境时能够透过其他虚拟环境或者全域环境内已安装的套件产生 requirements 档,此档桉将可在稍后创建新的虚拟环境时作为参考,提供快速设置新的虚拟环境所需的套件清单。

    虚拟环境

    整合 Python 套件管理员 (Package Manager)

    在 Python 中有许多有用的第三方套件能够透过 pip 或者 easy_install 套件管理员安装,让您能在代码中呼叫这些套件中的函式,协助您更快的达成开发目标。而在 Visual Studio 中高度整合这些套件管理员,让您不需要输入繁琐的指令即可简单的安装套件。

    如下图,可于方案总管内在欲安装套件的 Python 环境下点击滑鼠右键,即可看到安装 Python 套件的选项。

    Python 套件

    接着如下图输入您要安装的套件名称,在这裡您也可以指定版本安装,或者不指定则安装最新版本的套件。另外需要注意的是若您使用 easy_install 选项,将不会替您即将安装的套件整合至方案总管当中,如此一来将无法使用 Visual Studio 完整管理这些透过 easy_install 安装的套件。

    Python

    IntelliSense 对 Python 完整的支持

    Visual Studio 针对 Python 亦提供以往在 C#、VB、VC++ 等语言上 IntelliSense 的支持,例如:列出物件成员、函式呼叫参数与返回值资讯、快速谘询和自动完成文字等辅助功能,让您在撰写物件或者呼叫函式时能够更有信心,提高撰写效率。

    下图展示 IntelliSense 功能协助列出物件中所公开的成员内容。

     IntelliSense

    下图展示 IntelliSense 功能提供函式呼叫参数资讯。

     IntelliSense

    另外 IntelliSense 提供快速动作,例如键入 main 后按下「T,即可帮您自动补完合适的代码区段与相关参考。

     IntelliSense

    Python 使用侦错模式 (Debugging)

    Visual Studio 针对 Python 支持完整侦错功能,例如在程序执行时能够暂止于中断点处,此时能检视或修改当下执行情况的区域变数以及呼叫堆叠,并能于侦错模式下使用您熟悉的重要功能让您能更简易快速的掌握程序执行的情况。

    Debugging

    另外,Visual Studio 对 Python 支持了溷合侦错模式 (Mixed-Mode debugging),若您的 Python 代码中有使用到外部如 C/C++ 等 Native Code 并拥有该 Native Code 的原始码项目时便能进行溷合侦错模式。而与一般侦错模式一样,在 Python 外的语言仍可进入中断点改变其变数值。

    相同的,您也能够于混合侦错模式下自由的跳跃至不同代码的呼叫堆叠当中进行代码及变数的巡览。

    Debugging

    本控制

    Visual Studio 整合版本控制,其支持 Git 与 Visual Studio Team Services 版本控制,透过 Visual Studio 您现在不需要额外工具就能够直接于 Visual Studio 内对您的 Python 项目直接进行版本提交、复原、比较、检视代码历史纪录等版本控制所用到的常用功能。

    本控制

    本控制

    跨平台远端侦错 (Remote Debugging)

    Visual Studio 替 Python 程序加入了远端除错的能力,透过这个 Python 套件让您能够使用 Visual Studio 连接在不同的作业系统上 (如 Linux) 执行的 Python 程序。此项功能使得您在跨平台开发时更能够获得一致的开发体验与提升整体开发效率!

    如下图展示 Python 程序运作在一块 Linux 嵌入式开发板上,同时在个人电脑内的 Windows 10 运行着 Visual Studio 2015,其透过 ptvsd 套件能让您远端附加至序,直接对 Linux 嵌入式开发板上运行的 Python 程序进行如您所熟悉的侦错模式。并保有完整的侦错模式功能像是区域变数检视、呼叫堆叠分析等完整侦错功能来进行程序的分析与追踪。

    跨平台远端侦错








沪ICP备19023445号-2号
友情链接