美文网首页
django知识点

django知识点

作者: 胖虎很可爱 | 来源:发表于2018-04-20 15:48 被阅读0次

    django

    创建项目:

    django-admin startproject 项目名称
    例:
    django-admin startproject test1
    
    • manage.py是项目管理文件,通过它管理项目。
    • 与项目同名的目录,此处为test1。
    • *init*.py是一个空文件,作用是这个目录test1可以被当作包使用。
    • settings.py是项目的整体配置文件。
    • urls.py是项目的URL配置文件。
    • wsgi.py是项目与WSGI兼容的Web服务器入口,详细内容会在布署中讲到。

    创建应用

    使用一个应用开发一个业务模块,此处创建应用名称为booktest,完成图书-英雄的信息维护。

    创建应用的命令如下:

    python manage.py startapp booktest
    
    • *init.py*是一个空文件,表示当前目录booktest可以当作一个python包使用。
    • tests.py文件用于开发测试用例,在实际开发中会有专门的测试人员,这个事情不需要我们来做。
    • models.py文件跟数据库操作相关。
    • views.py文件跟接收浏览器请求,进行处理,返回页面相关。
    • admin.py文件跟网站的后台管理相关。
    • migrations里面存放迁移生成的文件。

    安装应用

    应用创建成功后,需要安装才可以使用,也就是建立应用和项目之间的关联,在test1/settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装。

    开发服务器

    在开发阶段,为了能够快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用。

    运行服务器命令如下:

    python manage.py runserver ip:端口
    例:
    python manage.py runserver
    可以不写IP和端口,默认IP是127.0.0.1,默认端口为8000。
    

    ORM框架

    O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。

    django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。

    使用django进行数据库开发的步骤如下:

    • 1.在models.py中定义模型类
    • 2.迁移
    • 3.通过类和对象完成数据增删改查操作

    数据迁移

    生成迁移文件命令如下:
    python manage.py makemigrations
    执行生成迁移文件命令后,会在应用目录下的migrations目录中生成迁移文件。
    
    执行迁移命令如下:
    python manage.py migrate
    

    配置视图

    使用视图时需要进行两步操作:

    * 1.定义视图函数
    * 2.配置URLconf
    
    1.定义视图

    视图就是一个Python函数,被定义在views.py中。

    视图的必须有一个参数,一般叫request,视图必须返回HttpResponse对象,HttpResponse中的参数内容会显示在浏览器的页面上。

    打开booktest/views.py文件,定义视图index如下

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("index")
    
    2.配置URLconf
    查找视图的过程

    请求者在浏览器地址栏中输入url,请求到网站后,获取url信息,然后与编写好的URLconf逐条匹配,如果匹配成功则调用对应的视图函数,如果所有的URLconf都没有匹配成功,则返回404错误。

    一条URLconf包括url规则、视图两部分:

    • url规则使用正则表达式定义。
    • 视图就是在views.py中定义的视图函数。

    需要两步完成URLconf配置:

    • 1.在应用中定义URLconf
    • 2.包含到项目的URLconf中

    在booktest/应用下创建urls.py文件,定义代码如下:

    from django.conf.urls import url
    from booktest import views
    urlpatterns = [
        url(r'^$', views.index),
    ]
    
    

    包含到项目中:打开test1/urls.py文件,为urlpatterns列表增加项如下:

    url(r'^', include('booktest.urls')),
    
    

    test1/urls.py文件完整代码如下:

    from django.conf.urls import include, url
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url(r'^', include('booktest.urls')),
    ]
    

    视图调用模板

    视图调用模板都要执行以上三部分,于是Django提供了一个函数render封装了以上代码。 方法render包含3个参数:

    • 第一个参数为request对象
    • 第二个参数为模板文件路径
    • 第三个参数为字典,表示向模板中传递的上下文数据

    打开booktst/views.py文件,调用render的代码如下:

    from django.shortcuts import render
    
    def index(request):
        context={'title':'图书列表','list':range(10)}
        return render(request,'booktest/index.html',context)
    

    url参数

    情况一:位置参数

    1)在booktest/urls.py中,修改fan2如下:

    url(r'^fan(\d+)_(\d+)/$', views.fan3,name='fan2'),
    

    2)在booktest/views中,定义视图fan3如下:

    def fan3(request, a, b):
        return HttpResponse(a+b)
    
    情况二:关键字参数

    1)在booktest/urls.py中,修改fan2如下:

    url(r'^fan(?P<id>\d+)_(?P<age>\d+)/$', views.fan4,name='fan2'),
    

    2)在booktest/views中,定义视图fan4如下:

    def fan4(request, id, age):
        return HttpResponse(id+age)
    

    反向解析

    要实现反向解析功能,需要如下步骤:

    1)在test4/urls.py中为include定义namespace属性。

    url(r'^',include('booktest.urls',namespace='booktest')),
    

    2)在booktest/urls.py中为url定义name属性,并修改为fan2。

    url(r'^fan2/$', views.fan2,name='fan2'),
    

    3)在模板中使用url标签做超链接,此处为templates/booktest/fan1.html文件。

    <html>
    <head>
        <title>反向解析</title>
    </head>
    <body>
    普通链接:<a href="/fan2/">fan2</a>
    <hr>
    反向解析:<a href="{%url 'booktest:fan2'%}">fan2</a>
    </body>
    </html>
    

    反向解析也可以应用在视图的重定向中。

    from django.shortcuts import redirect
    from django.core.urlresolvers import reverse
    
    return redirect(reverse('booktest:fan2'))
    

    相关文章

      网友评论

          本文标题:django知识点

          本文链接:https://www.haomeiwen.com/subject/itqzkftx.html