标签: django-urls

django urls 参数数量可变

我想知道 Django 中是否有一种方法可以让 url 允许在 / 之后有多个参数,其中参数的数量是可变的。

这是我的意思的一个例子:

因此,如果我有一个名为“关于我们”的页面,其网址为 /page/about_us,那么我有一个从“关于我们”链接的页面,称为“联系信息”,它的网址是否为 /page/about_us/contact_info,其下可能有另一个页面,依此类推。

您将如何编写 URL 处理以允许 /page 后跟任意数量的其他页面,中间有斜杠?这似乎对于做面包屑之类的事情很有用,而且还可以使网址非常可读。我只是不知道如何制作正则表达式或视图,可以将路径中的可变页数作为参数。

最好只使用一个正则表达式来捕获 /page/ 之后的所有内容作为一个长参数,然后让视图通过在 / 处拆分来分解它?这样的正则表达式会是什么样子?我似乎无法在正则表达式中包含 / 而不出现问题。

django django-urls django-views

2
推荐指数
1
解决办法
2640
查看次数

Django URL 调度程序示例 - 将 url 从视图传递到另一个视图

有人有一个快速 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)

我不知道从那里去哪里。另外,如何从“可用假期”视图转移到“选定”视图......

python django django-templates django-urls django-views

2
推荐指数
1
解决办法
6227
查看次数

我应该在我的 url 中使用 pk 还是唯一的 slug?

我想为我在 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)

这些方法是否具有安全性或性能优势?有什么理由选择其中之一吗?

python django url-routing django-urls

2
推荐指数
1
解决办法
2625
查看次数

在 Django test.py 文件中进行每次测试后,如何重新评估我的 urls.py 文件?

我的 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 django-urls django-testing django-settings

2
推荐指数
1
解决办法
569
查看次数

如何在不使用任何包的情况下从 django url 加密 pk?

如何在不使用任何包的情况下从 django url 加密和解密 pk 基本上我有一个像

example.com/update/1
Run Code Online (Sandbox Code Playgroud)

其中 pk=1

我想像 pk 1 = 345345435cgsfd2asdfaas 一样加密 pk

python encryption django django-urls

2
推荐指数
2
解决办法
3532
查看次数

Django,查看 url 参数

我有一个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来获取参数,但这似乎不是“正确”的方法。

django django-urls django-views

2
推荐指数
1
解决办法
3251
查看次数

Django - serve() 得到了一个意外的关键字参数“documuent_root”

我正在尝试为 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

2
推荐指数
1
解决办法
1502
查看次数

将 url 正则表达式翻译成 django 2.1 中的路径

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)

照着做?

python django django-urls

2
推荐指数
1
解决办法
972
查看次数

如何在我的用户页面 (HTML) 中为 django Admin 创建 url

我是编码新手,我正在尝试在 NavBar 中创建 URL 链接以重定向我的 Django 管理示例:

<a class="nav-link" href="{% url 'admin'%}"> Admin site </a>
Run Code Online (Sandbox Code Playgroud)

但是,Django 确实找到了;无反向匹配,

它适用于其他 URL 链接

我不得不尝试的事情:

  1. 正在项目 URL 中添加名称
  2. 在我的应用程序 URL 中包含 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 django-templates django-urls django-admin

2
推荐指数
1
解决办法
1270
查看次数

如何避免用户在 Django 中注册已使用的电子邮件?

我正在测试我的注册视图,我注意到如果我尝试使用现有的用户名进行注册,我会收到错误消息;如果我尝试使用已经存在的电子邮件进行注册,该应用程序会让我这样做。

显然,我不希望有人在我的网站上使用同一电子邮件注册多个帐户。我对 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)

python django django-urls django-views

2
推荐指数
1
解决办法
973
查看次数