除了我之外,我在我的应用程序中实现了100%的测试覆盖率urls.py.您对我如何为我的网址编写有意义的单元测试有什么建议吗?
FWIW这个问题出现了,因为我正在尝试测试驱动开发,并希望在编写代码来修复它们之前进行失败的测试.
默认情况下,登录后django会将用户重定向到帐户/配置文件页面,或者如果您编辑LOGIN_REDIRECT_URL,则可以将用户发送到您在settings.py中指定的另一个页面.
这很棒,但我希望用户(登录后)被重定向到一个自定义页面,该页面的链接看起来像这样:mysite.com/username.因此,默认帐户/配置文件或LOGIN_REDIRECT_URL设置在这种情况下不起作用,因为两者都是静态的.就我而言username,每个用户的地址部分都会发生变化.
当用户登录时,我如何能够做到这一点的任何想法将转到自定义用户页面,该用户页面在地址中具有用户名称,如: mysite.com/username?任何输入都是真正的赞赏.
我是Django的新手,正在尝试在我的网站上为音乐应用程序创建后端代码.
我在views.py文件中创建了正确的视图(在正确的目录中),如下所示:
def detail(request, album_id):
return HttpResponse("<h1>Details for Album ID:" + str(album_id) + "</h1>")
Run Code Online (Sandbox Code Playgroud)
但是,为此创建URL或路径时(如下所示)
#/music/71/ (pk)
path(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),
Run Code Online (Sandbox Code Playgroud)
我在终端上遇到警告:
?: (2_0.W001) Your URL pattern '^(?P<album_id>[0-9])/$' [name='detail'] has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().
Run Code Online (Sandbox Code Playgroud)
每当/music/(路径工作的)后面跟一个数字,例如/music/1(这是我想做的),就找不到页面,终端给出了上述警告.
这可能是一个简单的错误,只是我是愚蠢但我是Django和python正则表达式语句的新手,所以任何帮助表示赞赏.
在rails中,on可以用rake显示活动路由(http://guides.rubyonrails.org/routing.html):
$ rake routes
users GET /users {:controller=>"users", :action=>"index"}
formatted_users GET /users.:format {:controller=>"users", :action=>"index"}
POST /users {:controller=>"users", :action=>"create"}
POST /users.:format {:controller=>"users", :action=>"create"}
Run Code Online (Sandbox Code Playgroud)
django是否有类似的工具/命令,显示例如URL模式,模式的名称(如果有的话)以及视图中的相关功能?
我有一个简单的模型如下:
RATING_CHOICES = zip(range(1, 6), range(1, 6))
class Rating(models.Model):
value = models.IntegerField(choices=RATING_CHOICES)
additional_note = models.TextField(null=True, blank=True)
from_user = models.ForeignKey(User, related_name='from_user')
to_user = models.ForeignKey(User, related_name='to_user')
shared_object = models.ForeignKey(ObjectDetail, null=True, blank=True)
dtobject = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
从上面的模型我生成一个模型表单,在我的forms.py中如下:
class RatingForm(ModelForm):
class Meta:
model = Rating
exclude = ('from_user', 'dtobject',
'shared_object')
Run Code Online (Sandbox Code Playgroud)
在我的网址中,我尝试以下方法:
url(r'^rate/(?P<form_type>[\w]+)/(?P<oid>\d+)/(?P<oslug>[\w-]+)/$', 'rating_form', name='rating_form'),
Run Code Online (Sandbox Code Playgroud)
在我看来,以下内容:
def rating_form(form_type = None, oid = None, oslug=None):
print form_type
form = RatingForm(data=request.POST or None)
if request.POST and form.is_valid():
form.save()
return HttpResponseRedirect("/")
else:
return render(request, "share.html", {'form' : form }) …Run Code Online (Sandbox Code Playgroud) 我正在关注Django网站上的教程来创建一个简单的民意调查应用程序.但是,Django无法解析"//127.0.0.1:8000/polls",即使我在mySite/urls.py中定义了正则表达式.我在virtualenv中这样做,安装了最新的Django(1.7).
MYSITE/urls.py:
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^polls/', include('polls.urls')),
)
Run Code Online (Sandbox Code Playgroud)
MYSITE /调查/ urls.py:
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
)
Run Code Online (Sandbox Code Playgroud)
MYSITE /调查/ views.py:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
Run Code Online (Sandbox Code Playgroud)
MYSITE/settings.py:
...
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
....
ROOT_URLCONF = 'mySite.urls'
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Using the …Run Code Online (Sandbox Code Playgroud) views.py
def generate_xml(request, number):
caller_id = 'x-x-x-x'
resp = twilio.twiml.Response()
with resp.dial(callerId=caller_id) as r:
if number and re.search('[\d\(\)\- \+]+$', number):
r.number(number)
else:
r.client('test')
return str(resp)
Run Code Online (Sandbox Code Playgroud)
url.py
url(r'^voice/(?P<number>\w+)$', 'django_calling.views.generate_xml', name='generating TwiML'),
Run Code Online (Sandbox Code Playgroud)
每当我请求http://127.0.0.1:8000/voice/number?id=98获得以下错误时:
Request Method: GET
Request URL: http://127.0.0.1:8000/voice/number?id=90
Django Version: 1.6.2
Exception Type: AttributeError
Exception Value: 'str' object has no attribute 'get'
Exception Location: /usr/local/lib/python2.7/dist-
Run Code Online (Sandbox Code Playgroud)
完全追溯:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/voice/number?id=90
Django Version: 1.6.2
Python Version: 2.7.5
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_calling',
'django_twilio', …Run Code Online (Sandbox Code Playgroud) 我试图找出一个匹配domain.com\about-us \&domain.com\home \的网址
我有一个网址正则表达式:
^(?P<page>\w+)/$
Run Code Online (Sandbox Code Playgroud)
但它不会与网址匹配 - 在其中.
我试过了
^(?P<page>\.)/$
^(?P<page>\*)/$
Run Code Online (Sandbox Code Playgroud)
但似乎没什么用.
我正试图搞清楚Django URL名称空间.但我找不到任何示例或文档.
这是我尝试过的.
urls.py:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^foo/', include('sub_urls', namespace='foo', app_name='foo')),
(r'^bar/', include('sub_urls', namespace='bar', app_name='bar')),
)
Run Code Online (Sandbox Code Playgroud)
sub_urls.py:
from django.conf.urls.defaults import patterns, url
from views import view1
urlpatterns = patterns('views',
url(r'^(?P<view_id>\d+)/$', view1, name='view1')
)
Run Code Online (Sandbox Code Playgroud)
views.py:
from django.shortcuts import render_to_response
def view1(request, view_id):
return render_to_response('view1.html', locals())
Run Code Online (Sandbox Code Playgroud)
在view1.html中,{%url foo:view1 3%}输出/ foo/3,{%url bar:view1 3%}输出/ bar/3.无论我浏览到/ foo/X还是/ bar/X,都是如此.
我想要的是能够浏览到/ foo/X或/ bar/X,并且{%url view1 3%}分别输出/ foo/3或/ bar/3.
我正在为Django中的URL命名空间寻找一个很好的教程.我发现官方文档有点过于稀疏 - 它缺乏很好的例子.我在堆栈上发现了类似的问题,但答案并没有帮助我完全理解这个主题.
django ×10
django-urls ×10
django-views ×4
python ×4
django-forms ×1
python-3.x ×1
routing ×1
tdd ×1
unit-testing ×1
views ×1