【问题标题】:how to build a bookmark system in django as in instagram如何在 django 中构建书签系统,如 instagram
【发布时间】:2020-11-08 02:01:47
【问题描述】:

我想像在 Instagram 中一样构建这个书签系统,但在 view.py 中编写逻辑并显示它时遇到问题。因此,如果用户通过身份验证,我想要将基于“act-id”的“Act”添加到 Wishlist 模型中,如果我们使用 Ajax 进行通话后(单击书签图标时)或打开到会更好新的选择真的。这是我当前的代码...请帮助我!如果您需要任何额外的代码,请告诉我。

models.py

class Act(models.Model):
    label1 = models.CharField(max_length=50, blank=False)
    label2 = models.ImageField(blank=False, null=True)
    label3 = models.IntegerField(('year'), choices=YEAR_CHOICES, default=datetime.datetime.now().year)
    label4 = models.CharField(max_length=80)

    def __str__(self):
        return self.Name

class Wishlist(models.Model):
    user_id = models.ForeignKey(User, on_delete=models.CASCADE,null=True)
    act_id = models.ForeignKey(Act, on_delete=models.DO_NOTHING)

views.py

@csrf_exempt
def wishlist(request):
    act_id = request.POST.get('act_id')
    if not act_id:
        raise ValueError("Required act_id to set wishlist")
    user_id = request.user.pk
    try:
        act_id = Act.objects.get(pk=act_id)
        wishlist_obj = {
                        'user_id': user_id,
                        'act_id': act_id
        }
        Wishlist(**wishlist_obj).save()
    except ObjectDoesNotExist:
        return HttpResponse('Some error occured, unable to add to wishlist')
    return HttpResponse('Added to wishlist')

urls.py

urlpatterns = [
    path('signup/', views.signup, name='signup'),
    path('login/', views.login_req, name='login'),
    path("logout/", views.logout_req, name="logout"),
    path('home/', views.home, name='home'),
    path('wishlist/', views.wishlist, name='wishlist'),
]

更多上下文这里是 home.html 的概念图片

[![在此处输入图片描述][3]][3]

【问题讨论】:

  • 您面临的问题是什么?

标签: javascript python django ajax


【解决方案1】:

这是我对如何做到这一点的看法。

如果用户通过身份验证,则将模型加入愿望清单,它会是

我总是喜欢使用decorators 来检查用户是否经过身份验证。您可以在此处查看如何实现这一点 - Writing your own decorator for login authentication。然后您可以简单地应用@login_required 来检查用户是否经过身份验证。

您也可以简单地使用is_authenticated 属性检查views.py,以检查用户是否已登录。

if request.user.is_authenticated:
  # do something if the user is authenticated

如果我们在调用后使用 Ajax 会更好(点击书签图标时)

我还建议使用Ajax 请求来更新它,因为它适合异步任务。您可以查看示例here,了解如何编写ajax 函数。但简而言之,一旦用户点击 bookmark 按钮,将向 views.py 中的函数发出 ajax 请求,并带有相关的 post 数据,然后您可以简单地在函数中添加所需的操作。

编辑:

这个问题相当广泛,虽然我确实有一些解决方案,但大部分用文字写只会让你觉得很复杂,但我会试一试!

因此,假设您拥有保存并显示已愿望清单的卡片的模型;因此,在撤消该操作时,您只需使用 Ajax 对逻辑进行逆向工程。因此,首先,当用户单击以撤消已列入愿望清单的卡片时,您会进行 ajax 调用,例如here,然后在 views.py 中,您只需通过检查数据库中是否存在该对象来验证单击的元素是否确实是愿望清单。

如果存在,您只需从 views.py 中的函数返回成功 JSonResponse({}),然后在您的

success: function (response) { }

在您的Js 中,您只需添加相关的HTML 代码即可将卡片从愿望清单中取消。 here 展示了一个很好的示例,它演示了如何使用 JSONajax 更新未列出的卡片。

【讨论】:

  • 我在编写 views.py 逻辑(创建愿望清单)时遇到问题,一般来说,我正在尝试构建的这个系统就像电子商务商店上的“添加到购物车”按钮一样工作,除了我想使用 Ajax 作为 post req,我无法创建逻辑,如果你能帮助我,谢谢!
  • 您需要详细说明您所指的逻辑。您是否阅读了上面的链接以创建您的 ajax 发布请求?你只需要按照你需要的方式来工作
  • 如果我的逻辑是正确的,我会的视图(wishlist.html),如果有人取消单击该特定图标,它会在不重新加载页面的情况下被取消保存(这是 Ajax 的用武之地),所以我无法编写该逻辑,明白吗?如果您能做到这一点,将非常感谢您的帮助 thnx
  • @Falcon 我已经编辑了答案并添加了最好的解决方法。如果您有任何疑问,请阅读并告诉我;但在后一种情况下,请考虑充分理解我提到的链接,因为它们对于解决您的问题至关重要。同时,如果我的回答有帮助,请考虑支持/接受答案。
  • 不,我明白你的意思,但我的意思是我没有愿望清单模型工作,把它想象成我正在运行愿望清单视图函数和 pass 语句我没有有任何代码,所以我需要正确构建它吗?这就是我需要帮助的地方,Ajax 稍后会出现,这并不是真正的问题。谢谢你的时间,真的很感激!如果你想解决这个问题,那么可能使用 repl.it 之类的东西并分享链接,干杯伙伴!
猜你喜欢
  • 2012-06-11
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 2021-12-10
  • 2020-10-11
相关资源
最近更新 更多