django tutorial

django web project的项目结构:

根目录mysite/ 相当于整个django web project的根。
manage.py 就是管理当前web project的配置文件

第二个mysite/目录相当于是当前web project的一个web app(也就是整个web工程的一个功能模块)
每个web app下面需要有图中给定的一些配置文件: 包括 init.py urls.py (剩下的 settings.py 和 wsgi.py 暂时不清楚是否每个web app目录中都要有,或许是只有根 web app 目录才需要有 这里以后要补充)

在一个web project下面创建新的web app使用命令
python manage.py startapp [appname]

比如在mysite下面运行: python manage.py startapp polls 以后整个文件结构是:

在web app下面增加新的页面

比如:
(1)首先你需要在 polls/views.py 下面添加函数,这个函数对应着显示一个url请求的页面(有可能还负责处理当前url对应页面的逻辑? 暂时还没搞明白)
(python的web开发框架好像都是按照一个函数一个页面的原理进行的)

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

(2)然后,你就需要在polls/urls.py内映射本地web app的view 和 url的对应关系(没有urls.py则需要创建一个)

from django.conf.urls import url
from . import views

#r在字符串前面代表不要转义/,比如 r'^polls/test', 此时 /t 就不转义为制表符
#^貌似代表相对路径。比如在根urls.py下(如这里的mysite/mysite/urls.py)
# 如果是r'^polls/'则直接代表127.0.0.1:8080/polls/
#$代表路径的结束符,文档中好像说有了 '/' 则不再需要声明 '$'
urlpatterns = [
    url(r'^$', views.index, name='index'),  
]

(3)最后需要把 其他web app下的urls.py配置的url映射到根web app下的urls.py中,这里我们默认mysite/urls.py是根urls.py 。
设置根urls.py好像是在settings.py中,具体设置这个有什么规范和限制暂时还不知道

from django.conf.urls import include, url
from django.contrib import admin

#在一个urls.py中包含其他urls.py需要使用 django.conf.urls.include 函数指定被包含的urls.py的相对地址
urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

最后就可以通过访问 127.0.0.1:8080/polls 或者 127.0.0.1:8080/admin 请求到对应页面。

启动django web service

启动django web service 的命令是:

(进入web project目录后,运行)
python manage.py runserver [server ip address:port]

django url的配置问题

Note that these regular expressions do not search GET and POST parameters, or the domain name. For example, in a request to https://www.example.com/myapp/, the URLconf will look for myapp/.
In a request to https://www.example.com/myapp/?page=3, the URLconf will also look for myapp/.

managy.py通过设置settings.py来和已导入web apps互动

python manage.py shell

managy.py内设置DJANGO_SETTINGS_MODULE的路径:


在settings.py中,使用INSTALLED_APPS添加可用的web apps。 django自带的通用app都在django.contrib下。 自定义的web app需要自己指定路径



设置完这些之后,就可以通过调用manage.py访问到apps的各种资源(models, views, urls?)

django查找数据库,创建数据库表,修改数据库

都是通过调用web apps 下面的 models.py中的函数完成的(models.py中一个类被看做数据库中的一张table,类里面定义了很多fields就是该表所拥有的所有属性,类需要继承django.db.models.Model类,这样才可以在web app的其他地方,比如view 里面调用models.py里面的类从models.Model集成的方法去操作相应的数据库表,比如objects方法。)
比如:

类Question在数据库中定义了一张名为Question的表,里面含有属性 question_text, pub_date。



我们可以调用Question.objects.[各种方法] 去访问,操作Qustion表。
比如:


当objects.get()查找不到表中的记录时,会抛出DoesNotExist异常,这个异常是被定义在相应表的class下面的。

比如Qustion.objects.get(id=2)抛出DoesNotExist异常时,这个异常就是Question.DoesNotExist
我们相应的就应该这样处理异常:

django操作models.py的类,往数据库中添加记录

django实例化models.py中的类,就是往相应的数据库表中添加记录
比如:

#实例化一个Question
q = Question(question_text="What's new?", pub_date=timezone.now())
q.save() #使用从django.db.models.Model继承得来的save()方法,把实例对象当作一条记录存进相应的数据库表中

django路径匹配的过程

1.(先找ROOT_URLCONF定义的urls.py去匹配其中的urlpatterns)
2.如果找不到,则报错;如果找到了,则把余下的url参数去匹配找到的那个web app的 urls.py中的urlpatterns。
3.直到匹配到$为正常结束,或者没匹配到$则算作没匹配到。
When somebody requests a page from your website – say, “/polls/34/”, Django will load the mysite.urls
Python module because it’s pointed to by the ROOT_URLCONF
setting. It finds the variable named urlpatterns and traverses the regular expressions in order. After finding the match at '^polls/', it strips off the matching text ("polls/") and sends the remaining text – "34/" – to the ‘polls.urls’ URLconf for further processing. There it matches r'^(P<ques
tion_id>[0-9]+)/$', resulting in a call to the detail()。

两种渲染django默认templates的方法

方法一:使用django.template.loader加载template实例,然后调用template实例的render方法,通过HttpResponse返回客户端


方法二:直接调用django.shortcuts.render方法并返回给客户端

定义通用的错误处理页面

(1)先建立一个web app用来存放所有出错页面,比如404,403,500等

python manage.py startapp errorpages

(2)在errorpages目录下面创建templates文件夹,用于存放前端模板(这里我还不会整合bootstrap,所以暂时使用html就好)
官方推荐的方式建立 errorpages的templates目录结构为:
mysite

  • errorpages
  • templates
  • errorpages
  • 404.html
  • 500.html
  • ...

(3)在mysite web project的根web app下面的settings.py中的INSTALLS_APPS,添加errorpages的路径。django只会查找INSTALLED_APPS中的所有web apps目录下面的templates。因此,为了能够在errorpages中使用到templates,需要完成本步骤。

image.png

(4)在errorpages的views.py中添加对应错误页面的view类:
注意这里的模板的路径,只要从mysite/errorpages/templates的子目录开始写就行,因为我们已经在mysite/mysite/settings.py中定义了errorpages是一个INSTALLS_APPS成员,所以,在errorpages/views.py中调用render_to_response去加载templates时,django就会自动搜索到mysite/errorpages/templates目录,然后再根据render函数调用时传入的参数如:'errorpages/400.html'去查找上面那个目录是否有400.html这个文件。


(5)最后需要在mysite/mysite/urls.py 也就是根urls.py文件中映射错误代码和通用的错误页view。


以上,就是定义通用错误处理页面的方法。具体,遇到各种错误后,的一些处理逻辑,可以根据需要添加在errorpages/views.py的对应class中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容