django官方文档1.6学习笔记-编写你的第一个django程序

运行环境  centos6.5  django1.6 python2.7.8

python -c "import django;print djang.get_version()" or django.VERSION

  1. 创建django项目:

    django-admin.py startproject mysite

    目录结构如下:

    mysite/                             ###这个名字对django命名成什么都没关系。

          manage.py                     ###操作你项目的命令行工具

          myite/                        ###真正的django项目包,需要这个名字导入里面的内容

               __init__.py              ###把这个包变成一个朋友谈话哦能包

               settings.py              ###本django项目的配置相关

               urls.py                  ###本django项目的url声明

               wsgi.py                  ###于wsgi项匹配的WEB服务器的切入点

  2. 开发服务器的使用(默认是8000端口)

    python manage.py runserver 8080

    python manage.py runserver 0.0.0.0:8080

  3. 数据库设置:

    在settings.py中进行设置,django默认自带sqlite数据库

    python manage.py syncdb 创建数据库中不存在的数据库表,因为django自带一些app,需要创建完项目后创建这些表

  4. prijects和app的区别是什么?

    app是做什么的网络应用

    project是一个web站点中很多app和配置的集合

    一个app可以被很多个项目包含

    一个project可以包含很多个app

  5. 创建django app

    pyrhon manage,py startapp polls

    目录如下:

        polls/

            __init__.py

            admin.py

            models.py

            tests.py

            views.py

  6. 编辑app实体类models.py(app开发第一步...面向对象的语言的第一步估计都是吧)

    from django.db import models

    class Poll(models.Model):

        question = models.CharField(max_length=200)

        pub_date = models.DateTimeField("date published")

        def was_published_recently(self):

            return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

        #使用unicode,因为django的实体类默认使用unicode在python2.7.8中

        def __unicode__(self):

            return self.question

    class Choice(models.Model):

        poll = models.ForeignKey(Poll)

        choice_text = models.CharField(max_length=200)

        votes = models.IntegerField(default=0)

        def __unicode__(self):

            return self.choice_text

  7. 安装app,因为django的app是即插即用的,所以,你可以在多个项目中使用一个app,你也可以发布apps,因为因为他们不是必须进行给定的安装。

    在settings.py中安装app

    INSTALLED_APPS=(

    ‘polls‘,

    )

  8. 显示将要打印的sql语句(并不执行sql语句) python manage.py sql polls

    python manage.py syncdb

  9. python manage.py shell进入python shell,对实体类进行相关的数据库操作
  10. http://localhost:8000/admin/ 进入admin app

    admin.site.register(Poll) 告诉admin Poll这个实体类类有一个admin接口

  11. class PollAdmin(admin.ModelAdmin)

    fields = [‘pub_date‘,‘question‘]#对admin的前台进行重新排序

    admin.site.register(Poll,PollAdmin)

  12. class PollAdmin(admin.ModelAdmin):

        fieldsets = [#将实体类前台form的元素是否放在一个field标签中

            (None, {‘fields‘:[‘question‘]}),#第一个元素是名称,第二个元素是实体类名

            (‘Date information‘,{‘fields‘:[‘pub_date‘],‘classes‘:[‘collapse‘]}),#collaps:fieldset是否下拉隐藏

        ]

    admin.site.register(Poll,PollAdmin)

  13. class ChiceInline(admin.StackedInline):#admin.TabularInlin,更紧凑的添加方式

        model = choice

        extra = 3 #在创建Poll的时候,创建3个choice的选项,自动关联外键

    class PollAdmin(admin.ModelAdmin):

        fieldsets = [

            (None,{‘fields‘:[‘question‘]}),

            (‘Date information‘,{‘fields‘:[‘pub_date‘],‘classes‘:[‘collapse‘]}),

        ]

        inlines = [ChoiceInline]

    admin.site.register(Poll,PollAdmin)

    #在页面的最后, + Add anthon Choice

  14. 展示属性:

    class PollAdmin(admin.ModelAdmin):

        list_display = (‘question‘,‘pub_date‘)#将实体类中的两个属性进行展示

  15. 展示属性和方法

    class PollAdmin(admin.ModelAdmin):

        list_display = (‘question‘,‘pub_date‘,‘was_published_recently‘)#展示两个属性和实体类中一个方法的值

  16. 添加filter change list page

    class PollAdmin(admin.ModelAdmin):

        list_filter = [‘pubdate‘]

  17. 添加模糊查询

    class PollAdmin(modelsAdmin):

        search_fields = [‘question‘]#按此字段进行查询村,可添加多个,数据库查询使用like

  18. 个性化你的项目模板

    在项目目录下创建/template,templat

    /mysite/settings.py 并且打开template_dirs setting:

    TEMPLATE_DIRS = [os.path.join(BASE_DIR,‘templates‘)]

  19. 修改 app admin的模板

    在templates这个文件夹下,创建admin文件夹,拷贝django源码的admin/base_site.html到该文件夹下

    然后寻找到自己要修改的内容进行修改。

  20. 如果你寻找不到django在你机器上的源码,请运行以下的命令:

    python -c "import sys;sys.path=sys.path[1:];import django;print(django.__path__)"

  21. 所有的admin模板都能被覆盖,就像覆盖base_site.html一样,把他们从源码包中拷进你自己的目录中,并做修改
  22. 个性化admin index page:略
  23. django是怎么找到它的tempaltes的?

    django可以从很多地方寻找模板文件,依赖你的tempalte-loader设置,但是最基本的方式是使用TEMPLATE_DIRS设置

    TEMPALTE_DIRS = (

    "/home/html/templates/lawrence.com",

    "/home/html/templates/default",

    )

    你的模板文件可以放到你想要的任何地方,只要你的web服务器能读到他们。可以使用任何的后缀.txt .html,或者没有扩展名。注意这些路径需要使用linux风格的正斜杠,即使是在windows下

    djago.template.loader有两个函数从文件中加载模板:

        1,get_template(template_name):返回一个名字为给定名字的已经编译的template(a Template object),如果不存在,则raises django.template.TemplateDoesNotExist

        2,select_template(template_name_list):和get_template()一样,只不过使用一个template名字列表,在这个列表中,它返回第一个存在的template。

        按照TEMPLATE_DIRS的配置的路径顺序查找文件,如果查找到一个存在的template,则停止查找。

    使用子目录:

    最好是以子目录的方式在template目录中组织你的模板。习惯是一个app一个子目录

    加载一个模板从子目录中,仅仅使用简写就可以,像这样:

    get_tempalte(‘news/story_detail.html‘)

    结合你上面TEMPLATE_DIRS配置,则可能会加载下面的模板:

    /home/html/templates/lawrence.com/news/story_detail.html

    /home/html/templates/default/news/story_detail.html

  24. 加载器的类型:

    默认情况下,django使用基于文件的模板加载器,但是django还有其他知道怎么从其他资源中加载模板的一些加载器

    其中的一些默认环境下是失效的,你可以通过设置TEMPLATE_LOADERS使他们生效,TEMPALTE_LOADERS应该是字符串的元组,每一个字符串代表一个模板加载器类,下面是django自带的模板加载器:

    django.template.loaders.filesystem.Loader

    class filesystem.Loader

        从文件系统加载模板,根据TEMPLATE_DIRS的配置。默认有效。

    django.template.loaders.app_directories.Loader

    class app_directories.Loader

        从文件系统上加载django apps的模板。对每一个INSTALLED_APPS中安装的app,本加载器查找一个模板的子目录

        ,如果目录存在,django将在此目录中寻找模板。

    例如:

    INSTALLED_APPS = (‘myject.polls‘,‘myject.music‘)

    然后get_template(‘foo.html‘),将会在下面的文件夹以下面的顺序进行查找:

    /path/to/myproject/polls/templates/

    /path/to/myproject/music/templates/

    并且使用查找到的第一个找到的模板。

    INSTALLED_APPS中安装的app的顺序很关键,如果你想在myproject.polls个性化django admin使用你自己的admin/base_site.html,你必须的保证你的myprojrct.polls的顺序在django.contrib.admin之前。

    此加载器在第一次被引入的时候被优化,它缓存了一个列表哪个INSTALLED_APPS包有模板子目录。

    默认此此加载器有效。

    django.template.loaders.eggs.Loader

    class eggs.Loader

        很像app_directories模板加载器,但是此加载器从python eggs中加载而不是文件系统。

    默认此加载器无效。

    django.template.loaders.cached.Loafer

    class cached.Loader

        默认情况下,模板系统将会在在模板需要渲染的时候读取并编译他们,尽管django的模板系统非常快,读和编译模板的开销也会增加。

    缓存加载器是一种基于类的加载器,你配置了一列其他加载器时,此加载器应该被覆盖。包装的加载器被用来定位一次遇到的未知的模板。缓存加载器会记住这个编译的模板。缓存的模板被返回,当随后的请求要求加载相同模板时。(翻译的可能有问题)

    The cached template loader is a class-based loader that you configure with a list of other loaders that it should wrap. The wrapped loaders are used to locate unknown templates when they are first encountered. The cached loader then stores the compiled Template in memory. The cached Templateinstance is returned for subsequent requests to load the same template.

    比如:

    TEMPLATE_LOADERS=(

        (‘django.template.loaders.cached.Loader‘,(

        django.template.loaders.filesysytem.Loader‘‘,

        ‘django.template.loaders.app_directories.Loader‘,

        )),

    )

    缓存加载器默认无效

    django按TEMPLATE_LOADERS设置顺序使用模板加载器,他使用每种加载器知道找到一个匹配项。

  25. 在django中,网页和其他的内容被试图发送,一个试图被一个简单的python函数或者方法代表,django通过检查请求的url选择一个试图进行处理。

    你上网的时候可能遇到过一些类似的url“ME2/Sites/dirmod.asp?sid=&type=gen&mod=Core+Pages&gid=A6CD4967199A42D9B65B1B”,你将会为django拥有比那更优雅的url感到欣慰。

    为了让一个url匹配到视图,django使用‘urlconfs’,一个urlconf匹配urlpatterns到视图

    from django.http import HttpResponse

    def index(request):

        return HttpResponse("Hello,world.You are at the poll index")

    在django中,这可能最简单的视图。想要访问视图,我们需要把它和URL进行匹配,我们需要URLconf

    创建一个URLconf在polls目录,我创建一个文件命名为urls.py.你的app目录应该看上去像这样:

    polls/

        __init__.py

        admin.py

        models.py

        tests.py

        urls.py

        views.py

    在polls/url.py文件包含以下的代码:

    from django.conf.urls import patterns,url

    from polls import views

    urlpatterns = patterns(‘‘,

        url(r‘^$‘,views.index,name=‘index‘)

    下一个步骤是在root URLconf指向polls.urls模块。在mysite/urls.py中插入一个include()

    from django.conf.urls import patterns,include,url

    from django.contrib import admin

    admin.autodiscover()

    urlpatterns = patterns(‘‘,

        url(r‘^polls/‘,include(‘polls.urls‘)),

        url(r‘^admin/‘,include(admin.site.urls)),

    )

    现在,你已经连接index视图到URLconf,在你浏览器上运行http://localhost:8000/polls/,你将看到:

    Hello, world. You’re at the poll index.

    url()函数有四个参数,两个是必须的(regex view),两个是可选的(kwargs,name),这一点上,值得回顾下这些参数的作用:

    regex:正则表达式,用来匹配字符串格式的语法。django从第一个正则表达式开始,比对请求的URL,知道匹配成功

        注意:正则表达式不会匹配GET和POST的参数或者域名。

        实际上,你不许要精通正则表达式,因为你仅仅需要知道简单的格式。事实上,复杂的正则表达式可能有差的查找性能。所以你用不到正则表达式的全部功能。

        最后,一个性能提示:这些正则表达式在URLconf模块第一次被加载的时候被编译。

    view:当django找到匹配的正则表达式,会访问对应的视图函数,该视图函数会以HttpRequest作为第一个参数和任何从正则表达式捕获的作为其他参数。如果正则表达式使用simple captures,值将被传递作为位置参数,如果使用命名的captures,值被传递为关键字参数。

    kwargs:随意的关键字参数可以在关键字中被传递给目标视图,在本教程中我们不会使用django的这个特性

    name:命名你的url,让你在别的地方尤其是在模板中可以明确的的参考它。这个强大的特征允许你进行全局更改到项目的urlpatterns,当你仅仅只能修改一个文件的时候。

  26. 往polls/views.py中添加更多的视图

    def detail(request,poll_id):

        return HttpResponse(‘You are looking at poll %s‘ % poll_id)

    def results(request,poll_id):

        return HttpResponse(‘You are looking at the results of poll %s‘ % poll_id)

    def vote(request,poll_id):

        return HttpResponse("you are voting on poll %s" % poll_id)

    往polls.urls.py文件中添加新的视图

    from django.conf.urls import patterns,url

    from polls import views

    urlpatterns = patterns(‘‘,

    #ex:/poll/

    url(r‘^$‘,views.index,name="index"),

    #ex:/poll/5/

    url(r‘^(?P<poll_id>\d+)/$‘,views.detail,name=‘detail‘),

    #ex: /polls/5/reults/

    url(r‘^(?p<poll_id>\d)/reults/$‘,views.results,name="results")

    $ex:/polls/5/vote/

    url(r‘^(?P<poll_id>\d+)/vote/$‘,views.vote,name="vote"),

    )

时间: 2024-08-05 01:43:47

django官方文档1.6学习笔记-编写你的第一个django程序的相关文章

django官方文档1.6学习笔记-编写你的第一个django程序&lt;2&gt;

写几个有用的视图 每个视图负责做两件事情,返回一个HttpResponse对象包含被请求的页面的内容,或者抛出一个异常,例如Http404.剩下的视图做什么取决于你自己. 你的视图可以从数据库中读记录,或者不读.可以利用一个模板系统比如django自带的或者第三方的Python模板系统,或者不用.可以实时生成一个pdf文件,输出XML,创建一个ZIP压缩包.所有你想做的一切都可以做,使用任何你想使用python类库. 方便起见,我们使用django自带的数据库API,让我们简单的看一个index

Swift -- 官方文档Swift-Guides的学习笔记

在经历的一段时间的郁闷之后,我发现感情都是虚伪的,只有代码是真实的(呸) 因为看了swift语法之后依然不会用swift,然后我非常作死的跑去看官方文档,就是xcode里自带的help>documentation and API reference 其中的swift里的guide 这里主要总结一下里面每一章讲了什么,还有自己学到的东西和需要研究的东西 part 2:Building a Basic UI work with view controllers 关于比较基础的viewDidLoad,

Django官方文档学习

Django 1.10官方文档:https://docs.djangoproject.com/en/1.10/intro/tutorial01/ 1.查看django版本 python -m django --version 2.创建项目 django-admin startproject mysite 3.调试工程 python manage.py runserver [8080/0.0.0.0:8000] 4.创建APP python manage.py startapp polls 5.编

读vue-cli3 官方文档的一些学习记录

原来一直以为[email protected] 就是创建模板的工具,读了官方文档才知道原来这么有用,不少配置让我长见识了 Prefetch 懒加载配置 懒加载相信大家都是知道的,使用Import() 语法就可以在需要的时候加载了,但是读了官方文档Prefetch一节后,发现事情并没有想象的那么简单. 文档写的很清楚,Prefetch是在空闲的时候就加载一些不着急的文件,并且import默认是加上了Prefetch的,也就是说你使用了import可能并不是你想要的结果(比如用户点击某个按钮才触发加

django官方文档读书笔记

写在前面:这算是第二次读英文原文文档,第一次是读scrapy,感觉还是要做笔记,好记性不如烂笔头,现在已经忘了scrapy文档讲了什么了,心疼.以后要多读多写 经过半年的基础学习(懒,拖延)终于来到web开发这一步,当时买了董大的web实战,准备是用flask来实现的,但是后面在逼乎上找到某培训班的django视频资源,所以最终还是决定用django. 看过各种对django的评价之后,个人总结django是一个已经高度框架化的框架了(笑),他的每一部分M,V,T都已经帮用户分好了,用户可自主选

Django官方文档学习2——数据库及模板

网址:https://docs.djangoproject.com/en/1.10/intro/tutorial02/ 1.扫描installed_apps,创建需要的数据库table python manage.py migrate 2.在APP中创建模板(models) from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_

django 官方文档下载

今天发现自己的django文件有点过时了,于是想去下载一份新,找了老半天才找到pdf的下载地址:于是把它下载下来,希望以后可以直接用. 一.进行django官方网站: 二.文档的pdf文件就在document 页面的右下脚: 三.送一条django-1.11.2的文档地址作为结尾吧: https://media.readthedocs.org/pdf/django/1.11.x/django.pdf ----

Django官方文档之Model层

一.模型继承 1.抽象基类继承: 抽象基类: 抽象基类主要是作为一个信息集合,用在许多模型拥有共同信息的场合,本质上只是一个存储信息的容器,数据库中不创建表结构,不能单独使用,子类通过继承来获得父                 亲基类的字段和元类型数据,通过设置Meta类的abstract=True属性来声明为抽象基类,否则,不会自动变为抽象基类,现举例如下: 1 from django.db import models 2 3 class CommonInfo(models.Model):

Python学习笔记——2、创建第一个django应用

在helloworld工程的基础上,我们准备创建第一个基于web的django应用,把这个应用名字命名为demo 首先,是如何创建这个应用包,当然第一选择我们可以进入到cmd中,执行如下命令 python manage.py startapp demo 如果要在pycharm里面如何做呢: 还是要进入到Edit Configuration 在里面进行配置: 把demo换成其他名字,就是添加其他的应用,执行这个命令和进入到cmd里面去执行脚本的作用是一样的 执行完了即可见: 接下来,好的,让我们来