我想知道 Django 中是否有一种方法可以让 url 允许在 / 之后有多个参数,其中参数的数量是可变的。
这是我的意思的一个例子:
因此,如果我有一个名为“关于我们”的页面,其网址为 /page/about_us,那么我有一个从“关于我们”链接的页面,称为“联系信息”,它的网址是否为 /page/about_us/contact_info,其下可能有另一个页面,依此类推。
您将如何编写 URL 处理以允许 /page 后跟任意数量的其他页面,中间有斜杠?这似乎对于做面包屑之类的事情很有用,而且还可以使网址非常可读。我只是不知道如何制作正则表达式或视图,可以将路径中的可变页数作为参数。
最好只使用一个正则表达式来捕获 /page/ 之后的所有内容作为一个长参数,然后让视图通过在 / 处拆分来分解它?这样的正则表达式会是什么样子?我似乎无法在正则表达式中包含 / 而不出现问题。
有人有一个快速 url 调度程序示例吗?我查看了 Django 文档,但发现没有一个完整的示例来向您展示视图中的所有内容是如何工作的。
具体来说,我试图将“url”从一个视图传递到另一个视图。例如,我正在尝试制作一个假期网站:如果单击“可用假期”视图中名为“欧洲”的按钮,我想访问 www.example.com/selected/europe,其中显示所有欧洲假期如果单击可用假期视图中名为“澳大利亚”的按钮,我想访问 www.example.com/selected/australia,其中显示类似的澳大利亚假期。
到目前为止,在 url.py 中我有:
(r'^selected/(?P<location>\w+)/$', 'app.views.selected'),
Run Code Online (Sandbox Code Playgroud)
在views.py中我有:
def selected(request, location)
Run Code Online (Sandbox Code Playgroud)
我不知道从那里去哪里。另外,如何从“可用假期”视图转移到“选定”视图......
我想为我在 django 中编写的购物车应用程序编写 URLconf。我想知道构建 URL 的首选方式是什么。
用户可以通过超链接访问该 URL(他们不应该在地址栏中键入它)。它将指定的商品添加到他们的购物车中。我是不是该
使用该项目的 pk:
http://example.com/add/253
Run Code Online (Sandbox Code Playgroud)
或使用独特的 slug:
http://example.com/add/unique_item_slug
Run Code Online (Sandbox Code Playgroud)
这些方法是否具有安全性或性能优势?有什么理由选择其中之一吗?
我的 urls.py 中有以下结构 - 它允许我在开发时直观地检查在浏览器中发送的电子邮件的格式:
urlpatterns = [Various url pattenrns]
if settings.DEBUG:
urlpatterns += [URL Pattern for checking emails]
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我运行测试套件时,代码仅检查settings.DEBUG一次 - 不是每次测试甚至TestCase运行时都检查。
我尝试在适用@override_settings于 urlpattern 的测试之前使用装饰器,DEBUG=True如下所示:
# Most of my tests run fine with Debug=False
@override_settings(DEBUG=True)
# Tests that use the URL pattern for checking emails
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法让它在测试之间正确切换 Url 模式...大概是因为我的 urls.py 文件仅在整个应用程序的测试中加载一次。
有没有办法在我的 urls.py 中使用这种类型的构造并运行我的测试?我是否有理由不应该在 urls.py 中使用这种类型的条件?
如何在不使用任何包的情况下从 django url 加密和解密 pk 基本上我有一个像
example.com/update/1
Run Code Online (Sandbox Code Playgroud)
其中 pk=1
我想像 pk 1 = 345345435cgsfd2asdfaas 一样加密 pk
我有一个company模型,它的每个实例都有一个为admin用户命名的外键。
我正在编写一个视图以允许公司管理员管理他们的公司:
urls.py:
path('admin/crn=<company_spec_url>', CompanyAdminView.as_view(), name="CompanyAdminView"),`
Run Code Online (Sandbox Code Playgroud)
views.py:
class CompanyAdminView(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
template_name = 'company_admin.html'
def test_func(self):
company = Company.objects.filter(crn=context['company_spec_url'])[0]
return company.admin == self.user
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['company'] = Company.objects.filter(crn=context['company_spec_url'])[0]
context['announcements'] = CompanyAnnouncement.objects.filter(company__crn=context['company_spec_url'])
return context
Run Code Online (Sandbox Code Playgroud)
该get_context_data位工作正常,问题出在test_func. 显然,应该只允许公司的管理员管理公司,所以我试图进入test_func,以便对其进行测试。
中的代码test_func当前不起作用,因为它无法访问context. 最佳实践是:调用super().get_context_data一次,并创建context一个全局变量,以便可以从以下位置访问它test_func- 调用super().get_context_data两次,一次输入get_context_data一次test_func,或者完全调用其他方法?
我试过查看请求中的 GET dict,但它是空的。我可以test_func自己解析其中的 url来获取参数,但这似乎不是“正确”的方法。
我正在尝试为 DRF 设置媒体文件路径/图像,但它不起作用,我无法弄清楚原因。
我收到此错误:
serve() got an unexpected keyword argument 'documuent_root'
Run Code Online (Sandbox Code Playgroud)
我在 mac 上运行 django 1.11 DRF w/python 3.6。
我已经将设置 url 移动到顶级,为什么通过这个链接的方式所以我更近了一步,尽管我仍然无法弄清楚为什么我的链接在我点击它们时显示 404。
设置.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'src')
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
CORS_ORIGIN_WHITELIST = 'localhost:3000', #whitelists the localhost to run
Run Code Online (Sandbox Code Playgroud)
视图.py
from accounts.api.permissions import IsOwnerOrReadOnly
from rest_framework import generics, mixins, permissions, viewsets
from books.models import Books
from books.api.serializers import BooksSerializer
class BookViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly] # authentication_classes = []
serializer_class = …Run Code Online (Sandbox Code Playgroud) django django-urls django-views django-media django-rest-framework
url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
views.activate, name='activate'),
Run Code Online (Sandbox Code Playgroud)
我一直在做教程,但在 django 2.1 中你必须使用路径,我如何转换为 2.1 django 兼容路径功能?
是否
path('activate/<str:uidb64>/<uuid:token>/', views.activate, name='activate')
Run Code Online (Sandbox Code Playgroud)
照着做?
我是编码新手,我正在尝试在 NavBar 中创建 URL 链接以重定向我的 Django 管理示例:
<a class="nav-link" href="{% url 'admin'%}"> Admin site </a>
Run Code Online (Sandbox Code Playgroud)
但是,Django 确实找到了;无反向匹配,
它适用于其他 URL 链接
我不得不尝试的事情:
我的项目网址代码:
from Django.contrib import admin
from django.urls import path, include
urlpatterns = [
path(r'admin/', admin.site.urls, name='admin' ),
path(r'accounts/', include('django.contrib.auth.urls')),
path(r'api-auth/', include('rest_framework.urls'), name='rest_framework'),
path(r'', include('app.urls')),
Run Code Online (Sandbox Code Playgroud)
我的应用程序 URL 代码:
from django.urls import path, include
from . import views #function views
from django.contrib.auth.decorators import login_required, permission_required
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'tank', …Run Code Online (Sandbox Code Playgroud) 我正在测试我的注册视图,我注意到如果我尝试使用现有的用户名进行注册,我会收到错误消息;如果我尝试使用已经存在的电子邮件进行注册,该应用程序会让我这样做。
显然,我不希望有人在我的网站上使用同一电子邮件注册多个帐户。我对 Django 相当陌生,因为我注意到表单检查用户名是否已经存在,我认为它会对电子邮件字段做同样的事情。
我真的不知道如何开始,我应该在我的观点上还是在表格上工作?以及如何让它循环遍历我的数据库并查找电子邮件是否已注册?我以为email = form.cleaned_data.get('email')会做的伎俩,但它没有。任何帮助表示赞赏。
这是我的观点:
def register(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
messages.success(request, f"New Account Created: {username}")
login(request, user)
messages.info(request, f"You are now logged in as {username}")
return redirect("main:homepage")
else:
for msg in form.error_messages:
messages.error(request, f"{msg}: {form.error_messages[msg]}")
form = NewUserForm
return render(request,
"main/register.html",
context={"form":form})
Run Code Online (Sandbox Code Playgroud)
这是表格:
class NewUserForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def …Run Code Online (Sandbox Code Playgroud) django ×10
django-urls ×10
django-views ×5
python ×5
django-admin ×1
django-media ×1
encryption ×1
url-routing ×1