美文网首页
django tutorial

django tutorial

作者: __Jingyu__ | 来源:发表于2017-06-21 20:16 被阅读0次

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中。

相关文章

网友评论

      本文标题:django tutorial

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