发布网友 发布时间:2024-10-01 02:06
共1个回答
热心网友 时间:2024-10-01 02:53
导读:很多朋友问到关于djangourl在哪里创建的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
django怎么发起url请求开始于setting文件。当你运行pythonmanage.pyrunserver,脚本将在于manage.py同一个目录下查找名为setting.py的文件。这个文件包含了所有有关这个Django项目的配置信息,均大写:TEMPLATE_DIRS,DATABASE_NAME,等.最重要的设置时ROOT_URLCONF,它将作为URLconf告诉Django在这个站点中那些Python的模块将被用到
当访问URL/hello/时,Django根据ROOT_URLCONF的设置装载URLconf。然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配的。当找到这个匹配的URLpatterns就调用相关联的view函数,并把HttpRequest对象作为第一个参数。
正如我们在第一个视图例子里面看到的,一个视图功能必须返回一个HttpResponse。一旦做完,Django将完成剩余的转换Python的对象到一个合适的带有HTTP头和body的WebResponse
总结一下:
进来的请求转入/hello/.
Django通过在setting.py中的ROOT_URLCONF配置来决定根URLconf.
Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
如果找到匹配,将调用相应的视图函数
视图函数返回一个HttpResponse
Django转换HttpResponse为一个适合的HTTPresponse,以Webpage显示出来
如何创建一个Django网站本文演示如何创建一个简单的django网站,使用的django版本为1.7。
1.创建项目
运行下面命令就可以创建一个django项目,项目名称叫mysite:
$django-admin.pystartprojectmysite
创建后的项目目录如下:
mysite
├──manage.py
└──mysite
├──__init__.py
├──settings.py
├──urls.py
└──wsgi.py
1directory,5files
说明:
__init__.py:让Python把该目录当成一个开发包(即一组模块)所需的文件。这是一个空文件,一般你不需要修改它。
manage.py:一种命令行工具,允许你以多种方式与该Django项目进行交互。键入pythonmanage.pyhelp,看一下它能做什么。你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。
settings.py:该Django项目的设置或配置。
urls.py:Django项目的URL路由设置。目前,它是空的。
wsgi.py:WSGIweb应用服务器的配置文件。更多细节,查看HowtodeploywithWSGI
接下来,你可以修改settings.py文件,例如:修改LANGUAGE_CODE、设置时区TIME_ZONE
Django媒体文件URL的配置
在Django中经常需要配置图片、视频等表态文件,在配置时较为复杂,这里纪录一下:
在文件尾部加入以下目录,用于存放上传的文件
在models中写上image字段其中%Y代表年,%m代表月,blank=True代表可以为空。当上传文件时,代表上传到image目录下,以当前年月子目录的文件夹中。
image=models.ImageField(upload_to="image/%Y/%m",blank=True)
其中src中的{{MEDIA_URL}}会在模板中渲染为第一步中的/media/
如果您想在模板中使用{{MEDIA_URL}},请在“模板”的“context_processors”选项中添加django.template.context_processors.media。
通过以上步骤,基本上可以在前端正常渲染出结果了,但还需要给图片添加一个URL以正常显示。
第一行为引入静态文件的serve,第二行为导入工程配置文件中的MEDIA_ROOT
在url中加入:
cmd中如何在e盘新建django文件1、在任意盘创建一个文件夹,然后在新建文件选择Django。
2、在url视图中创建路径。
3、在views视图中创建视图,让他呈现出来,并连接我们展示的HTML页面。
Django新手教程6,新建一个项目感觉再不按套路出牌就要被群众围殴了,那咱么就开始吧。
打开CMD黑窗口,我们输入
workondjango_env
我们先看看怎么在黑窗口里面穿梭于各个URL之间,你先看你现在所处的位置,一般来说,新打开的CMD,都是处于
C:/User/your_name
这个位置,我们先到D盘,根目录从C到D,我们只需要输入
D:
就可以到达D盘了,如果你的django_env是激活的那么,他会自动跳转到
D:/py_env/django_env
这个目录下,我们当然可以把项目就建在这里,但也可以建在别的地方。所以请输入(注意cd和两点之间有一个空格)
cd..
cd是前往的意思,两个小点指的是父亲,意思是前往当前目录的父目录,
于是,我们来到
D:/py_env
目录下,再次输入
cd..
于是我们达到
D:/
这已经是D盘的根目录的再输入cd..已经没有什么效果了。如果你之前按照我的教程一步一步来,那么,你已经在在这个根目录上建好了一个叫django_project的空文件夹,如果你没有建好,那么请输入
mkdirdjango_project
创建一个这个文件夹,当然,你也可以在图形界面,打开我的计算机,然后到达位置右键新建文件夹。这里为了逼格和更加熟悉cmd窗口起见,我建议你还是用命令行。
我们cmd的路径(准确的说是工作路径)现在在D盘的根目录,
因此,请输入
cddjango_project
表示前往django_project,当然,这个时候你得确定django_project是D盘根目录下的一个子目录。
如果,我们还处于
D:py_env/django_env
那么输入
cddjango_project是无效的,你得按照我们刚才一步一步抵达D盘,然后在进入到django_project。或者,你可以直接输入绝对路径
cdD:/django_project
使用上面的命令,只要你处于D盘,无论是在哪一级的目录,都可以一步到位。
抵达现场,我们马上就要新建我们的项目了。
激动人心的一刻到了,请在CMD中输入
django-adminstartprojectmysite
这时,我们创建了一个项目,这个项目的名字叫mysite,等等,说好的做云盘,为毛名字不是mycloud呢?这就要提到django的精妙之处了,新建了一个项目,就相当于,我们在计算机上圈了一块地(D:/django_project/mysite目录以后就是我们网络服务这一块的地盘了),还没开始建展馆,为什么先圈地而不是直接新建一个展馆呢,因为我们圈了地就可以在地上建很多展馆啊,在django看来,云盘啥的,够不上称为一个项目,只能称之为应用(一座展馆),只有将很多展馆放在一起,才能称之为项目,也就是说,一个项目可以包含很多的应用(APP),比如我们的网站可以提供云盘服务,我们也可以,提供个人博客服务,我们还可以开一个讨论某植物的论坛啥的,反正就是为了将来能够提供全家桶服务,所以,云盘只能算做是一个APP。当然,目前我们只这块地上建一座提供云服务的展馆。其他的展馆以后再说。
还是在cmd黑窗口,请输入
dir
用这条指令可以列出当前目录下的子目录和存放文件的情况,
我们可以看到,生成一个叫mysite的子目录,实际上,在mysite的上面还有两个目录,一个目录是一个点,表示自己,也就是django_project本身,另一个目录是两个点,表示父目录,也就是D盘根目录。所以我们看到的是django_project目录的一家三代。
这和图形界面基本是统一的,下图的左上角圈的地方表示的就是父目录,至于本身目录嘛,就没必要刻意用什么图形表示了。
你用鼠标点击某个文件夹,实际上系统内部就是帮你运行了一下
cd你点击的文件夹
你点击后退,则帮你运行
cd..
回到正题,我们看到了一个mysite子目录,所以进去看看,请输入
cdmysite
然后输入
dir
查看情况
发现又有一个mysite目录,坑爹啊,俄罗斯套娃呢这是!
这一看就知道django是外国人搞得工具,子目录跟父目录叫同一个名字(好歹给子一级的目录起个名字叫mysite二世啥的行不。没办法,django设计者这么叫了,我们也不能随便乱改,以后我们把里面的那个mysite叫做子mysite,外面的那个叫父mysite以区分),仔细一看,旁边还有一个manage.py,先不不管这个,再进去子mysite看一下,还好,再没有mysite目录了,里面是
里面有4个py文件,看到没有,其中有一个是urls.py,URL之重要,需要专门一个文件来管理,如果你之前有认真看文章的话应该就能差不多猜到它是起什么作用的文件了。除了urls.py,settings.py也是非常重要的,都是用来管理mysite这个项目的,所以,我觉得最后这个mysite文件夹应该叫做mysite_manage因为它里面的东西,和它旁边的manage.py一样都是用来管理项目的。
为了让大家对项目结构有更清楚认识,我找了django官网上的图片
请教各位高手Django的url配置问题流线型化(streamlinling)函数导入
1:直接导入视图函数
fromdjango.conf.urls.defaultsimport*
frommysite.viewsimporthello
urlpatterns=patterns('',
(r'^hello/$',hello),
(r'^time/$',time),
)
2:导入包函模块名和函数的客串,而不是函数本身
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^hello/$','views.hello'),
(r'^time/$','views.time'),
)
3:不用导入任何视图内容,写清楚字符串描述
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^hello/$','mysite.views.hello'),
(r'^time/$','mysite.views.time'),
)
4:提取一个公共视图前缀
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.views',
(r'^hello/$','hello'),
(r'^time/$','time'),
)
5:partterns()返回对对象的相加
旧:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.view',
(r'^hello/$','hello'),
(r'^time/$','time'),
(r'^other/$','mysite.others.other'),
)
新:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('mysite.view',
(r'^hello/$','hello'),
(r'^time/$','time'),
)
urlpatterns+=patterns('mysite.others',
(r'^other/$','other'),
)
6:到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们
想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更
高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数传给视图。
在python正则表达式中,命名的正则表达式组的语法是(?pnamepattern),这里name是组的名字,而pattern是匹配的某个模式。
下面是一个使用无名组的URLconf的例子:
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^arcticles/(\d{4})/$',views.year_archive),
(r'^arcticles/(\d{4})/(\d{2})/$',view.moth_archive),
)
下面是相同的URLconf,使用命名组进行了重写:
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^arcticles/(?Pyear\d{4})/$',veiws.year_archive),
(r'^arcticles/(?Pyear\d{4})/(?Pmonth\d{2})/$',veiws.month_archive),
)
如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用:
month_archive(request,'2006','03')
而带命名组,同样的请求就是这样的函数调用:
month_archive(request,year='2006',month='03')
从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug,
还可以让你的定义中对参数重新排序。
7:视图冗余:
#urls.py
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^(foo)/$',views.foobar_view),
(r'^(bar)/$',views.foobar_view),
)
#views.py
fromdjango.shortcutsimportrender_to_response
frommysite.modelsimportMyModel
deffoobar_view(request,url):
m_list=MyModel.objects.filter(is_new=True)
ifurl=='foo':
template_name='template1.html'
elifurl=='bar':
template_name='template2.html'
returnrender_to_response(template_name,{'m_list':m_list})
利用上面的方法可以减少视图冗余
8:为url里传入固定的参数:
#urls.py
fromdjango.conf.urls.defaultsimport*
frommysiteimportviews
urlpatterns=patterns('',
(r'^foo/$',views.foobar_view,{'template_name':'template1.html'}),
(r'^bar/$',views.foobar_view,{'template_name':'template2.html'}),
)
#views.py
fromdjango.shortcutsimportrender_to_response
frommysite.modelsimportMyModel
deffoobar_view(request,template_name):
m_list=MyModel.objects.filter(is_new=True)
returnrender_to_response(template_name,{'m_list':m_list})
一些URL参数详解:
/mydata/jan/01/
/mydata/jan/02/
/mydata/jan/03/
以上为三个url我们可以用不同的方式实现
1:(r'^mydata/(/w{3})/(/d/d)',views.mydata)mydata(request,'jan','01')
2:(r'^mydata/(?Pmonth/w{3})/(?Pday/d/d)',view.mydata)mydata(request,month='jan',day='01')
3:(r'^mydata/birthday/$',views.mydata,{month:'jan',day:'01'})mydata(request,month='jan',day='01')
9:include导入:
fromdjango.conf.urls.defaultsimport*
urlpatterns=patterns('',
(r'^weblog/',include('mysite.blog.urls')),
(r'^photos/',include('mysite.photos.urls')),
(r'^about/$','mysite.views.about'),
)
10:实例:
验证用户是否登录:
以下是三个视图
defmy_view1(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template1.html')
defmy_view2(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template2.html')
defmy_view3(request):
ifnotrequest.user.is_authenticated():
returnHttpResponseRedirect('/accounts/login/')
#...
returnrender_to_response('template3.html')
以下是对视图进行包装:
defrequires_login(view):
defnew_view(request,*args,**kwargs):
ifnotrequest.user.is_authenticated():#如果用户没有登录,跳转到登录界面
returnHttpResponseRedirect('/accounts/login/')
returnview(request,*args,**kwargs)#否则返回传进来的方法
returnnew_view#返回new_view值:登录视图或者是传进来的视图
以下为URL配置:
fromdjango.conf.urls.defaultsimport*
frommysite.viewsimportrequires_login,my_view1,my_view2,my_view3
urlpatterns=patterns('',
(r'^view1/$',requires_login(my_view1)),
(r'^view2/$',requires_login(my_view2)),
(r'^view3/$',requires_login(my_view3)),
)
结语:以上就是首席CTO笔记为大家介绍的关于djangourl在哪里创建的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。