Django学习笔记

Posted 王之迷惑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习笔记相关的知识,希望对你有一定的参考价值。

1、Django创建第一个项目:

      Django安装完成后,首先我们学习的第一个管理工具是 django-admin.py,用这个工具来创建第一个Django项目。

      创建命令为:django-admin.py startproject MyFirstSite

      创建完成后目录说明:

             MyFirstSite:项目的容器

             manage.py:整个项目的管理文件

             settings.py:项目的配置文件

             urls.py: url的路径和视图函数的映射关系

             wsgi.py:web服务器的入口,以便运行当前项目。

             views.py:存放视图函数                      

              models:处理数据库

       启动应用命令:python manage.py runserver  [IP   port]   注:ip与port可以省略,默认为:127.0.0.1:8000

2、Django-MTV模型:     

       Model(模型):负责业务对象与数据库的对象(ORM)

       Template(模版):负责如何把页面展示给用户

       View(视图):负责业务逻辑,并在适当的时候调用Model和Template

       此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

       

2.1、URLs路由配置系统详细介绍:

         views.py中 url() 可以接收四个参数,分别是两个必选参数:regex、view 和两个可选参数:kwargs、name,接下来详细介绍这四个参数。

                  1>   regex: 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。

                  2>   view: 用于执行与正则表达式匹配的 URL 请求。

                  3>   kwargs: 视图使用的字典类型的参数。

                  4>   name: 用来反向获取 URL(别名)。

2.1.1、正则表达式参数:

         1> 通过小括号()来捕获URL 中的值并以位置 参数传递给视图。

              例:url(r\'^articles/([0-9]{4})/$\', views.year_archive)    使用“([0-9]{4})”来匹配url中的值

         2> 有名分组:使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。

              例:url(r\'^articles/(?P<year>[0-9]{4})/$\', views.year_archive),  请求调用时使用views.year_archive(request, year=\'2005\')函数即可

2.1.2、URL的反向解析:

         Django 提供一个办法是让URL 映射是URL 设计唯一的地方。你填充你的URLconf,然后可以双向使用它:

         1>  根据用户/浏览器发起的URL 请求,它调用正确的Django 视图,并从URL 中提取它的参数需要的值。

         2>  根据Django 视图的标识和将要传递给它的参数的值,获取与之关联的URL。

        在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:

           * 在模板中:使用url 模板标签。

           * 在Python 代码中:使用django.core.urlresolvers.reverse() 函数。

           * 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法。

2.2  视图函数(views):

       视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的html内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。

      下面是一个返回当前日期和时间作为HTML文档的视图:

from django.http import HttpResponse
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

  让我们逐行阅读上面的代码:

          *  首先,我们从 django.http模块导入了HttpResponse类,以及Python的datetime库。

          *  接着,我们定义了current_datetime函数。它就是视图函数。每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request

          * 注意,视图函数的名称并不重要;不需要用一个统一的命名方式来命名,以便让Django识别它。我们将其命名为current_datetime,是因为这个名称能够精确地反映出它的功能。

          *这个视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。

2.2.1  HttpRequest对象    

\'\'\'
path:       请求页面的全路径,不包括域名

method:     请求中使用的HTTP方法的字符串表示。全大写表示。例如

               if  req.method=="GET":

                         do_something()

               elif req.method=="POST":

                         do_something_else()

GET:         包含所有HTTP GET参数的类字典对象

POST:       包含所有HTTP POST参数的类字典对象

COOKIES:     包含所有cookies的标准Python字典对象;keys和values都是字符串。

FILES:      包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中
             name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:

             filename:      上传文件名,用字符串表示
             content_type:   上传文件的Content Type
             content:       上传文件的原始内容


user:       是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前
             没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
             可以通过user的is_authenticated()方法来辨别用户是否登陆:
             if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
             时该属性才可用

session:    唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。

\'\'\'

2.2.2  render函数:       

          render(request, template_name[, context])

          结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

         参数:

             request: 用于生成响应的请求对象。

             template_name:要使用的模板的完整名称,可选的参数

        context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。

        content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE 设置的值。

             status:响应的状态码。默认为200。

2.2.3  redirect函数:

         参数可以是:

           一个模型:将调用模型的get_absolute_url() 函数

           一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称

           一个绝对的或相对的URL,将原封不动的作为重定向的位置。

          默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

注意:render和redirect的区别:

1、 if 页面需要模板语言渲染,需要的将数据库的数据加载到html,那么render方法则不会显示这一部分。

2、 the most important: url没有跳转到/yuan_back/,而是还在/login/,所以当刷新后又得重新登录。

        

 

以上是关于Django学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Django学习笔记

django学习笔记1

Django 从入门到忘记学习笔记

Django学习笔记(上)

Django后端开发学习笔记URL调度器

Django后端开发学习笔记URL调度器