问题正则表达式,如何使用搜索表单处理带有可选参数的多个视图 URL

0wly

几周以来,我一直在努力学习 Django,但此时我完全迷失了方向。我对正则表达式了解不多,也看不出我的错误在哪里。

我构建了一个应用程序,可以在不同的课程领域进行研究。我用模板和 url 创建了第一个视图 (view.index_cleint)。在学习使用正则表达式管理 URL 的过程中,我决定使用不同的查询过滤器创建另一个视图(view.test_api)。(我有 2 个模板链接到 2 个不同的视图以显示每个正确的信息)。

这是带有正则表达式的 URL 文件:

from django.urls import path, re_path
from . import views

urlpatterns = [
    path('search/', views.index_client, name='dashboard'),
    re_path('^search/(?P<param>\w+)/$', views.index_client, name='dashboard'),
    path('dash/', views.test_api, name='test_dash'),
    re_path('^dash/(?P<param>\w+)/$', views.test_api, name='test_dash'),
   ]

前两个 url 用于我的视图 1 并处理搜索表单。两个 last 用于我的第二个视图并处理搜索表单。

这是我的第一个视图的代码:

def index_client(request, param='company_name'):
    print("test all")

    if request.method == 'GET' and 'q' in request.GET:
        query = request.GET['q']
        if query is None or query == '':
            query = ''
    else:
        query = ''

    list_param_query = ['company_name', 'email', 'status', 'id']

    if param not in list_param_query:
        param = 'company_name'
    url_param = param + '/'

    try:
        last_update_obj = UpdateDatabase.objects.latest('last_update')
    except UpdateDatabase.DoesNotExist:
        diff_date = None
        hours = 0
        minutes = 0
        seconds = 0
        print("No last_update in database")
    else:
        last_update = last_update_obj.last_update
        date_now = timezone.now()
        diff_date = date_now - last_update
        days, seconds = diff_date.days, diff_date.seconds
        hours = days * 24 + seconds // 3600
        minutes = (seconds % 3600) // 60
        seconds = seconds % 60

    try:
        customer_list = Client.objects.filter(
            Q(company_name__contains=query) | Q(email__contains=query)
            | Q(status__contains=query) | Q(first_name__contains=query)
            | Q(last_name__contains=query)).order_by(str(param))
        print(customer_list)
    except Client.DoesNotExist:
        return render(request, 'maintenance/dashboard.html', locals())

    print(customer_list.count())
    page = request.GET.get('page', 1)
    paginator = Paginator(customer_list, 1000)
    try:
        customers = paginator.page(page)
    except PageNotAnInteger:
        customers = paginator.page(1)
    except EmptyPage:
        customers = paginator.page(paginator.num_pages)

    try:
        total_confirmed = Client.objects.filter(status="CONFIRMED").count()
    except Client.DoesNotExist:
        total_confirmed = 0
        print("Error can't count customers")

    if diff_date is not None:
        return render(request, 'maintenance/dashboard.html', {'customers': customers,
                                                                  'total_confirmed': total_confirmed,
                                                                  'diff_date': diff_date, 'hours': hours,
                                                                  'minutes': minutes, 'seconds': seconds})
    return render(request, 'maintenance/dashboard.html', {'customers': customers,
                                                                  'total_confirmed': total_confirmed,
                                                                  'diff_date': diff_date})

这里是我的第二个视图的代码:

def test_api(request, param='company_name'):
    print("test2")

    if request.method == 'GET' and 'q' in request.GET:
        query = request.GET['q']
        if query is None or query == '':
            query = ''
    else:
        query = ''

    list_param_query = ['company_name', 'email', 'status', 'id']

    if param not in list_param_query:
        param = 'company_name'
    url_param = param + '/'

    try:
        last_update_obj = UpdateDatabase.objects.latest('last_update')
    except UpdateDatabase.DoesNotExist:
        diff_date = None
        hours = 0
        minutes = 0
        seconds = 0
        print("No last_update in database")
    else:
        last_update = last_update_obj.last_update
        date_now = timezone.now()
        diff_date = date_now - last_update
        days, seconds = diff_date.days, diff_date.seconds
        hours = days * 24 + seconds // 3600
        minutes = (seconds % 3600) // 60
        seconds = seconds % 60

    try:
        search_1 = Q(status__contains="CONFIRMED")
        customer_list = Client.objects.filter(search_1 &
            Q(company_name__contains=query) | Q(email__contains=query)
            | Q(status__contains=query) | Q(first_name__contains=query)
            | Q(last_name__contains=query)).order_by(str(param))
        print(customer_list)
    except Client.DoesNotExist:
        return render(request, 'maintenance/dashboard_p1.html', locals())

    print(customer_list.count())
    page = request.GET.get('page', 1)
    paginator = Paginator(customer_list, 1000)
    try:
        customers = paginator.page(page)
    except PageNotAnInteger:
        customers = paginator.page(1)
    except EmptyPage:
        customers = paginator.page(paginator.num_pages)

    try:
        total_confirmed = Client.objects.filter(status="CONFIRMED", priority=1).count()
    except Client.DoesNotExist:
        total_confirmed = 0
        print("Error can't count customers")

    if diff_date is not None:
        return render(request, 'maintenance/dashboard_p1.html', {'customers': customers,
                                                                         'total_confirmed': total_confirmed,
                                                                         'diff_date': diff_date, 'hours': hours,
                                                                         'minutes': minutes, 'seconds': seconds})
    return render(request, 'maintenance/dashboard_p1.html', {'customers': customers,
                                                                     'total_confirmed': total_confirmed,
                                                                     'diff_date': diff_date})

如果这是我用于视图的模型:

class Client(models.Model):
    company_name = models.CharField(max_length=100)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    email = models.EmailField(max_length=70, unique=True)
    is_confirmed = models.BooleanField(default=False)
    is_open = models.BooleanField(default=False)
    priority = models.IntegerField(default=0)
    date_open = models.DateTimeField(null=True, blank=True)
    date_confirmed = models.DateTimeField(null=True, blank=True)
    CONFIRMED = 'CONFIRMED'
    WAITING = 'WAITING'
    OPEN = 'OPEN'

    MNT_STATUS = [
        (CONFIRMED, 'Confirmed'),
        (OPEN, 'Open'),
        (WAITING, 'Waiting'),
    ]
    status = models.CharField(
        max_length=11,
        choices=MNT_STATUS,
        default=WAITING,
    )

第一个和第二个视图之间的唯一区别是过滤器可以获取所有优先级为 1 的客户:

在第一个视图中:

    try:
        customer_list = Client.objects.filter(
            Q(company_name__contains=query) | Q(email__contains=query)
            | Q(status__contains=query) | Q(first_name__contains=query)
            | Q(last_name__contains=query)).order_by(str(param))
        print(customer_list)
    except Client.DoesNotExist:
        return render(request, 'maintenance/dashboard.html', locals())

在第二种观点中:

    try:
        search_1 = Q(status__contains="CONFIRMED")
        customer_list = Client.objects.filter(search_1 &
            Q(company_name__contains=query) | Q(email__contains=query)
            | Q(status__contains=query) | Q(first_name__contains=query)
            | Q(last_name__contains=query)).order_by(str(param))
        print(customer_list)
    except Client.DoesNotExist:
        return render(request, 'maintenance/dashboard_p1.html', locals())

在创建我的第二个视图 test_api 并添加两个 lasts URL 之前一切正常,当单击我的搜索表单时,我被重定向到我的视图 1 并且搜索成功。

但是因为每次我从视图 2 的模板进行研究时都会添加我的第二个视图,所以显示了视图 1 查询的结果。我不仅得到优先级 1,而且得到所有对象

当我从“127.0.0.1:8000/dash/”(视图 2)进行研究时,我看到了 printf(2),它在我的第二个视图中,但查询没有得到尊重,我从视图 1 中得到结果.

你看到我犯了什么错误了吗?

提前发送!

贾法里

一切似乎都对。我认为问题出在这里search_1 = Q(status__contains="CONFIRMED")

请向我们展示您的客户模型。(对不起,我不能发表评论)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式-带有参数的url

来自分类Dev

正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

来自分类Dev

如何在java中使用正则表达式从url获取可选参数的值

来自分类Dev

使用多个正则表达式的Django URL问题

来自分类Dev

django url正则表达式以匹配可选参数

来自分类Dev

可选url参数的正则表达式规则

来自分类Dev

C# 正则表达式可选 url 参数

来自分类Dev

Url 可选参数正则表达式

来自分类Dev

如何使用带有查询字符串的正则表达式来验证URL?

来自分类Dev

如何使用正则表达式验证URL是否具有GET参数

来自分类Dev

使用可选查询字符串参数重写URL的正则表达式

来自分类Dev

多个参数的Django URL,视图,正则表达式配置

来自分类Dev

正则表达式-也提取带有www的URL

来自分类Dev

带有正则表达式的Yii url规则

来自分类Dev

URL的正则表达式问题

来自分类Dev

正则表达式检查url是否带有斜杠和参数

来自分类Dev

正则表达式 url 参数

来自分类Dev

如何编写正则表达式以从 URL 获取参数

来自分类Dev

使用正则表达式删除URL参数

来自分类Dev

使用参数为 url 编写正则表达式

来自分类Dev

如何在带有url的正则表达式字符串的javascript中查找?

来自分类Dev

使用正则表达式获取带有大写符号的字符串迅速的URL

来自分类Dev

Perl正则表达式:替换URL的可选部分

来自分类Dev

正则表达式,避免URL内的可选组

来自分类Dev

如何使用正则表达式使jmeter排除url?

来自分类Dev

如何使用正则表达式模式从URL提取参数

来自分类Dev

如何仅使用正则表达式从URL中提取参数值

来自分类Dev

如何使用正则表达式替换URL中的查询参数?

来自分类Dev

为什么带有端口号的Vutify表单验证的URL规则的正则表达式会出错?

Related 相关文章

  1. 1

    正则表达式-带有参数的url

  2. 2

    正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

  3. 3

    如何在java中使用正则表达式从url获取可选参数的值

  4. 4

    使用多个正则表达式的Django URL问题

  5. 5

    django url正则表达式以匹配可选参数

  6. 6

    可选url参数的正则表达式规则

  7. 7

    C# 正则表达式可选 url 参数

  8. 8

    Url 可选参数正则表达式

  9. 9

    如何使用带有查询字符串的正则表达式来验证URL?

  10. 10

    如何使用正则表达式验证URL是否具有GET参数

  11. 11

    使用可选查询字符串参数重写URL的正则表达式

  12. 12

    多个参数的Django URL,视图,正则表达式配置

  13. 13

    正则表达式-也提取带有www的URL

  14. 14

    带有正则表达式的Yii url规则

  15. 15

    URL的正则表达式问题

  16. 16

    正则表达式检查url是否带有斜杠和参数

  17. 17

    正则表达式 url 参数

  18. 18

    如何编写正则表达式以从 URL 获取参数

  19. 19

    使用正则表达式删除URL参数

  20. 20

    使用参数为 url 编写正则表达式

  21. 21

    如何在带有url的正则表达式字符串的javascript中查找?

  22. 22

    使用正则表达式获取带有大写符号的字符串迅速的URL

  23. 23

    Perl正则表达式:替换URL的可选部分

  24. 24

    正则表达式,避免URL内的可选组

  25. 25

    如何使用正则表达式使jmeter排除url?

  26. 26

    如何使用正则表达式模式从URL提取参数

  27. 27

    如何仅使用正则表达式从URL中提取参数值

  28. 28

    如何使用正则表达式替换URL中的查询参数?

  29. 29

    为什么带有端口号的Vutify表单验证的URL规则的正则表达式会出错?

热门标签

归档