Django学习笔记总结

django-admin.py startproject tutorial  新建项目
cd tutorial
django-admin.py startapp quickstart




使用下面的命令创建表:
python manage.py migrate




然后创建一个用户名为 admin 密码 password123 的管理员:
python manage.py createsuperuser






Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。




   django处理一个Request的过程是首先通过django 中间件,然后再通过默认的URL方式进行的。所以说我们要


做的就是在django 中间件这个地方把所有Request拦截住,用我们自己的方式完成处理以后直接返回Response。




为了激活中间件组件,把它添加到你的settings模块的MIDDLEWARE_CLASSES列表中,在MIDDLEWARE_CLASSES里,


每个中间件 
组件通过一个字符串来表示:完整的到中间件的类名的Python路径,例如,这里是通过django-admin.py 


startproject创建的 
默认的MIDDLEWARE_CLASSES:


MIDDLEWARE_CLASSES = (   
    'django.middleware.common.CommonMiddleware',   
    'django.contrib.sessions.middleware.SessionMiddleware',   
    'django.contrib.auth.middleware.AuthenticationMiddleware',   
    'django.middleware.doc.XViewMiddleware',   
)  




为了激活中间件组件,把它添加到你的settings模块的MIDDLEWARE_CLASSES列表中,在MIDDLEWARE_CLASSES里,


每个中间件组件通过一个字符串来表示:完整的到中间件的类名的Python路径,例如,这里是通过django-


admin.py startproject创建的 默认的MIDDLEWARE_CLASSES:


MIDDLEWARE_CLASSES = (   
    'django.middleware.common.CommonMiddleware',   
    'django.contrib.sessions.middleware.SessionMiddleware',   
    'django.contrib.auth.middleware.AuthenticationMiddleware',   
    'django.middleware.doc.XViewMiddleware',   
)  

Middleware并不是Django所独有的东西,在其他的Web框架中也有这种概念。在Django中,Middleware可以渗入处理流程的四个阶段:request,view,response和exception,相应的,在每个Middleware类中都有rocess_request,process_view, process_response 和 process_exception这四个方法。你可以定义其中任意一个活多个方法,这取决于你希望该Middleware作用于哪个处理阶段。每个方法都可以直接返回response对象。

Middleware是在Django BaseHandler的load_middleware方法执行时加载的,加载之后会建立四个列表作为处理器的实例变量:

_request_middleware:process_request方法的列表

_view_middleware:process_view方法的列表

_response_middleware:process_response方法的列表

_exception_middleware:process_exception方法的列表

Django的中间件是在其配置文件(settings.py)的MIDDLEWARE_CLASSES元组中定义的。在MIDDLEWARE_CLASSES中,中间件组件用字符串表示:指向中间件类名的完整Python路径。




Django.contrib是一个强大的功能包,是Django的标准库。Django的标准库存放在 django.contrib 包中。每个


子包都是一个独立的附加功能包。 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包







admin : 自动化的站点管理工具。
admindocs : 为Django admin站点提供自动文档。
auth : Django的用户验证框架。
comments : 一个评论应用,关于这个应用的更多信息请参见Django的官方网站。
contenttypes : 这是一个用于引入文档类型的框架,每个安装的Django模块作为一种独立的文档类型。 这个框 架主要在Django内部被其他应用使用,它主要面向Django的高级开发者。可以通过阅读源码来了解关于这个框架 的更多信息,源码的位置在 django/contrib/contenttypes/。
csrf : 这个模块用来防御跨站请求伪造(CSRF)。
databrowse:帮助你浏览数据的Django应用。 
flatpages : 一个在数据库中管理单一HTML内容的模块。 
formtools : 一些列处理表单通用模式的高级库。 
gis : 为Django提供GIS(Geographic Information Systems)支持的扩展。 举个例子,它允许你的Django模型 保存地理学数据并执行地理学查询。请参看http://geodjango.org/上的文档。
humanize : 一系列 Django 模块过滤器,用于增加数据的人性化。
localflavor:针对不同国家和文化的混杂代码段。例如,它包含了验证美国的邮编 以及爱尔兰的身份证号的方 法。
markup : 一系列的 Django 模板过滤器,用于实现一些常用标记语言。 
redirects : 用来管理重定向的框架。 
sessions : Django 的会话框架。 
sitemaps : 用来生成网站地图的 XML 文件的框架。
sites : 一个让你可以在同一个数据库与 Django 安装中管理多个网站的框架。
syndication : 一个用 RSS 和 Atom 来生成聚合订阅源的的框架。
webdesign : 对设计者非常有用的Django扩展。到编写此文时,它只包含一个模板标签{% lorem %}。




urls.py 的规则:


URL配置(URLconf)就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调用的视图函


数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码


。 例如,当用户访问/foo/时,调用视图函数foo_view(),这个视图函数存在于Python模块文件view.py中。






要弄清Django如何处理URL配置规则,先要了解几个概念。


URL模式:URL模式是指在Django urls模块中,名为urlpatterns的元组中包含的每一个值。通常由patterns方法


生成urlpatterns元组的内容。
URL分解器:通常,一个URL分解器对应一个URL配置模块,它可以包含多个URL模式,也可以包含多个其他URL分解


器。通过这种包含结构设计,实现Django对URL的层级解析。URL分解器是Django实现app与项目解耦的关键。通常


由include方法操作的URL配置模块,最终会被解释成为URL分解器。
匹配结果:匹配结果是指当URL被正确匹配时,需返回的匹配结果。






每个URL模式都需要指定如下几个内容:


一个正则表达式字符串。
一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串。
可选的要传递给视图函数的默认参数(字典形式)。
一个可选的name参数。
路径前缀,加在视图函数路径字符串的前面组成完整的视图函数路径。可以通过patterns方法的第一个参数指定


例如:(r'^hello/$',hello),模式包含了一个尖号(^)和一个美元符号($)。这些都是正则表达式符号,并且有特


定的含义:上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。


^hello/$匹配hello/字符串,即在网址http://127.0.0.1:8000/hello/找到hello/后,使用hello()函数显示出来


,如果没有'$'结尾,则网址中输入hello1/;hello2/都会对应以hello()函数显示出来。




通常一个 URL 分解器对应一个 URL 配置模块,它可以包含多个URL模式,也可以包含多个其他URL分解器。通过


这种包含结构设计,实现Django对URL的层级解析。


URL 分解器是 Django 实现 app 与项目解耦的关键。通常由 include 方法操作的 URL 配置模块,最终会被解释


成为 URL 分解器。


每个URL分解器都需要指定如下几个内容:


一个正则表达式字符串。URL开始部分是否匹配正则表达式,如匹配,去除成功匹配部分后余下部分匹配包含的


URL模式和URL分解器。
URL配置模块名或URL配置模块的引用。
可选的关键参数(字典形式)。
可选的App名称。
可选的名称空间名字。




一般来说,一个请求先会从 URL 匹配器 RegexURLPattern 进入,RegexURLPattern 真正发挥匹配作用的是 


RegexURLResolver 对象,并调用 RegexURLResolver.resolve() 启动了解析,一切从这里开始。






urls.py的配置写法一般有三种方式。


1. 第一种是导入视图的方式,就是 The Django Book 里面样例的写法:



from blog.views import index 

url(r'^nowamagic/', index)       
2. 第二种方法是视图处理方法,看代码就知道是怎么回事了。



url(r'^nowamagic/', 'test.views.index')
3. 第三种是把模型与视图写在前缀里。



urlpatterns = patterns('blog.views',     

url(r'^nowamagic$', 'index' )   

url(r'^nowamagic/\d{2}/$', 'index') 


url(r'^nowamagic/(?P<id>\d{2})/$', 'index' )
大同小异。




下面来个详细的代码总结:
from django.conf.urls.defaults import *


urlpatterns = patterns('',
    # test_client modeltest urls
    (r'^test_client/', include('modeltests.test_client.urls')),
    (r'^test_client_regress/', include('regressiontests.test_client_regress.urls')),


    # File upload test views
    (r'^file_uploads/', include('regressiontests.file_uploads.urls')),


    # Always provide the auth system login and logout views
    (r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
    (r'^accounts/logout/$', 'django.contrib.auth.views.logout'),


    # test urlconf for {% url %} template tag
    (r'^url_tag/', include('regressiontests.templates.urls')),


    # django built-in views
    (r'^views/', include('regressiontests.views.urls')),


    # test urlconf for middleware tests
    (r'^middleware/', include('regressiontests.middleware.urls')),


    # admin view tests
    (r'^test_admin/', include('regressiontests.admin_views.urls')),
    (r'^generic_inline_admin/', include('regressiontests.generic_inline_admin.urls')),


    # admin widget tests
    (r'widget_admin/', include('regressiontests.admin_widgets.urls')),


    (r'^utils/', include('regressiontests.utils.urls')),


    # test urlconf for syndication tests
    (r'^syndication/', include('regressiontests.syndication.urls')),


    # conditional get views
    (r'condition/', include('regressiontests.conditional_processing.urls')),


    # middleware exceptions tests
    (r'middleware_exceptions/', include('regressiontests.middleware_exceptions.urls')),


    # special headers views
    (r'special_headers/', include('regressiontests.special_headers.urls')),
)




运行Django项目的方法很多,这里主要介绍一下常用的方法。一种是在开发和调试中经常用到runserver方法,使


用Django自己的web server;另外一种就是使用fastcgi,uWSGIt等协议运行Django项目,这里以uWSGIt为例。


runserver方法


runserver方法是调试Django时经常用到的运行方式,它使用Django自带的WSGI Server运行,主要在测试和开发


中使用,使用方法如下:


Usage: manage.py runserver [options] [optional port number, or ipaddr:port]
# python manager.py runserver    # default port is 8000
# python manager.py runserver 8080
# python manager.py runserver 127.0.0.1:9090


WSGI,全称Web Server Gateway Interface,或者Python Web Server Gateway Interface,是为Python语言定义


的Web服务器和Web应用程序或框架之间的一种简单而通用的接口,基于现存的CGI标准而设计的。WSGI其实就是一


个网关(Gateway),其作用就是在协议之间进行转换。


uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。注意uwsgi是一种通信协议,而uWSGI是实现


uwsgi协议和WSGI协议的Web服务器。uWSGI具有超快的性能、低内存占用和多app管理等优点。




一般我们在Django程序中查询数据库操作都是在QuerySet里进行进行,例如下面代码:


>>> q1 = Entry.objects.filter(headline__startswith="What")




Django 使用 django.db.models.ForeignKey 定义多对一关系


ManyToManyField 用来定义多对多关系,用法和其他Field 字段类型一样:在模型中做为一个类属性包含进来。


ManyToManyField 需要一个位置参数:和该模型关联的类。



学习Django时,使用PyCharm作为开发工具可以提高效率。PyCharm是一款功能强大的Python集成开发环境,它提供了丰富的功能和工具,可以帮助开发者更好地编写和调试Django应用程序。 在学习Django的过程中,可以使用PyCharm创建Django项目,并使用其内置的Django支持功能来简化开发过程。PyCharm可以自动识别Django项目的结构,并提供代码补全、语法检查、调试等功能,帮助开发者更快地编写和调试代码。 此外,PyCharm还提供了集成的版本控制系统,如Git,可以方便地管理和追踪代码的变化。它还支持自动化测试和部署,可以帮助开发者更好地进行项目管理和发布。 总之,使用PyCharm作为开发工具可以提高Django学习的效率和便利性。它的强大功能和友好的用户界面使得开发者可以更专注于代码的编写和项目的开发。\[1\] \[2\] \[3\] #### 引用[.reference_title] - *1* *3* [PyCharm平台下初学Django框架](https://blog.csdn.net/howard2005/article/details/93491364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pycharm平台下的Django教程](https://blog.csdn.net/Sunshine_ZCC/article/details/73918408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Web魔法师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值