首页>>后端>>Python->django的url如何配置文件(2023年最新分享)

django的url如何配置文件(2023年最新分享)

时间:2023-12-11 本站 点击:0

导读:今天首席CTO笔记来给各位分享关于django的url如何配置文件的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

「Django框架」-拆分配置文件settings

使用 Django 命令生成一个项目的基本结构时,配置信息默认保存在和项目目录同名的目录下的 settings.py 文件里, 在实际的开发中,对于一个项目而言,这样往往是不合适的,需要将 settings 配置文件拆分为几个文件, 线上和线下都会使用的文件放置到 base.py 文件里,线上的放置在 product.py 文件里,开发测试的文件放置在 develop.py 文件里。这样功能划分就明确了,方便我们线上线下的调试。

1)在项目同名目录下,创建一个 settings 的包(目录下含 __init__.py 的文件夹)。

2)在 settings 的包中分别新建3个文件:公共基础 base.py (用于配置 Django 默认生成配置文件), develop.py (用于开发环境)、 product.py (用于生产环境)。

3)将原来的 settings.py 的内容复制到 base.py 文件中。

4)确认目录OK后,我们需要修改 base.py 中的时区和语言配置:

如果有类似公共部分需要修改的,则在 base.py 中修改即可,例如注册子应用之类的,在此就不一一举例。。

5)之后,对于线上线下不同部分,我们只要导入 base.py 模块,再针对不同部分进行修改即可,例如线上线下对接不同的测试数据库,我们则可以修改数据库连接:

6)修改 manage.py 文件, Django 使用自带服务启动时需要知道 settings 文件的路径。

7)到上生产的时候,使用 asgi.py ( Django3.x 中)或 wsgi.py ( Django2.x 以下版本),则可以更改生产配置文件的路径:

以上又有个问题,如果线上线下环境切换,又要改动代码, 我们可以通过设置系统环境变量来动态获取,避免修改代码:

这样通过读取系统环境变量中的 LIPIN_PROFILE 来控制 Django 加载不同的 settings 文件。

这样可以将原来的 settings.py 文件删掉!!

但是这样就会有个问题,你会发现之前好好的网页我们访问不了了,模板找不到!

这是因为之前的配置文件中,路径问题,因为我们原来的配置文件是在同名目录下,而我们现在将配置文件拆分为一个新的包,所以还要上一级目录才是我们需要的:

Django中关于URL配置文件urls.py的理解

1. 什么是urls.py

2. urls.py文件位置

3. urls.py配置格式

urlpatterns = patterns('视图前缀',

    url(r'^正则表达式1/$', '视图函数1', name="url标识1"),

    url(r'^正则表达式2/$', '视图函数2', name="url标识2"),

)

4. urls.py如何工作

python——Django项目开发:配置项目/static/路径,调用css、img、js等静态文件

在Django项目开发中,不能像正常web开发一样通过 'imgs/bg.jpg' 访问本地静态文件,需要做一些配置,才能实现静态文件的访问。

一、首先在项目根路径下新建一个static文件夹,然后在static文件夹下可以新建相应的css、imgs、js等文件夹,用于存放css、img、js等静态文件。

二、项目配置

1、打开settings.py,在底部添加:

2、打开urls.py,在 urlpatterns 中添加:(注意,如果你在blog目录下也建立了urls.py,那么就得在blog/urls.py中做修改。别忘了import settings):

(不过我经过实测,不加这一个,也可以完成静态文件的访问)

3、在html模板最上面添加:

然后在需要的地方按照这个格式进行调用,如:

最后重新运行项目,img等本地静态文件就可以被django找到了,这时模板对应的页面就可以显示使用img等文件了。

请教各位高手Django的url配置问题

流线型化(streamlinling)函数导入

1:直接导入视图函数

from django.conf.urls.defaults import *

from mysite.views import hello

urlpatterns = patterns('',

(r'^hello/$', hello),

(r'^time/$', time),

)

2:导入包函模块名和函数的客串,而不是函数本身

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns('',

(r'^hello/$', 'views.hello'),

(r'^time/$', 'views.time'),

)

3:不用导入任何视图内容,写清楚字符串描述

from django.conf.urls.defaults import *

urlpatterns = patterns('',

(r'^hello/$', 'mysite.views.hello'),

(r'^time/$', 'mysite.views.time'),

)

4:提取一个公共视图前缀

from django.conf.urls.defaults import *

urlpatterns = patterns('mysite.views',

(r'^hello/$', 'hello'),

(r'^time/$', 'time'),

)

5:partterns()返回对对象的相加

旧:

from django.conf.urls.defaults import *

urlpatterns = patterns('mysite.view',

(r'^hello/$', 'hello'),

(r'^time/$', 'time'),

(r'^other/$', 'mysite.others.other'),

)

新:

from django.conf.urls.defaults import *

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的例子:

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns('',

(r'^arcticles/(\d{4})/$',views.year_archive),

(r'^arcticles/(\d{4})/(\d{2})/$', view.moth_archive),

)

下面是相同的URLconf,使用命名组进行了重写:

from django.conf.urls.defaults import *

from mysite import views

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

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns('',

(r'^(foo)/$', views.foobar_view),

(r'^(bar)/$', views.foobar_view),

)

# views.py

from django.shortcuts import render_to_response

from mysite.models import MyModel

def foobar_view(request, url):

m_list = MyModel.objects.filter(is_new=True)

if url == 'foo':

template_name = 'template1.html'

elif url == 'bar':

template_name = 'template2.html'

return render_to_response(template_name, {'m_list': m_list})

利用上面的方法可以减少视图冗余

8:为url里传入固定的参数:

# urls.py

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns('',

(r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),

(r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),

)

# views.py

from django.shortcuts import render_to_response

from mysite.models import MyModel

def foobar_view(request, template_name):

m_list = MyModel.objects.filter(is_new=True)

return render_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导入:

from django.conf.urls.defaults import *

urlpatterns = patterns('',

(r'^weblog/', include('mysite.blog.urls')),

(r'^photos/', include('mysite.photos.urls')),

(r'^about/$', 'mysite.views.about'),

)

10:实例:

验证用户是否登录:

以下是三个视图

def my_view1(request):

if not request.user.is_authenticated():

return HttpResponseRedirect('/accounts/login/')

# ...

return render_to_response('template1.html')

def my_view2(request):

if not request.user.is_authenticated():

return HttpResponseRedirect('/accounts/login/')

# ...

return render_to_response('template2.html')

def my_view3(request):

if not request.user.is_authenticated():

return HttpResponseRedirect('/accounts/login/')

# ...

return render_to_response('template3.html')

以下是对视图进行包装:

def requires_login(view):

def new_view(request, *args, **kwargs):

if not request.user.is_authenticated(): #如果用户没有登录,跳转到登录界面

return HttpResponseRedirect('/accounts/login/')

return view(request, *args, **kwargs) #否则返回传进来的方法

return new_view #返回new_view值:登录视图或者是传进来的视图

以下为URL配置:

from django.conf.urls.defaults import *

from mysite.views import requires_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)),

)

django的url配置求教为什么无法include

from django.conf.urls import patterns, include, url

from views import *

urlpatterns = patterns(

url(r'^hello/$', hello),

)

第二个url写法是有问题的,导入模块写法应该是from app.views import hello这个格式,在django中,都应该这种导入方法。

另入,像第二个,我平时是这么写的:

url(r'^hello/$', 'app.viwes.hello`),

多看下django book里面的url写法。

结语:以上就是首席CTO笔记为大家介绍的关于django的url如何配置文件的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/25360.html