首页 > 编程语言 >基于python+django的二手商品交易平台-二手商品供需系统

基于python+django的二手商品交易平台-二手商品供需系统

时间:2023-10-29 11:02:30浏览次数:31  
标签:get python self 二手 django models context True app

项目简介

该项目是基于python的web类库django开发的一套web网站,二手商品交易平台,给师弟开发的课程作业。大家在学习过程中,遇到问题可以github咨询作者。

预览展示

http://mask.gitapp.cn

源码地址

https://github.com/geeeeeeeek/mask

开发步骤:启动项目

django-admin startproject mask

开发步骤:创建应用

python3 manage.py startapp app

开发步骤:model设计

主要是对需求表Product进行设计,在此项目中,我们需要标题、联系人、电话等字段。可参考models.py文件。

设计字段如下:

class Product(models.Model):
    list_display = ("title", "type", "location")
    title = models.CharField(max_length=100,blank=True, null=True)
    type = models.IntegerField(default=0)
    pv = models.IntegerField(default=0)
    contact = models.CharField(max_length=10,blank=True, null=True)
    location = models.CharField(max_length=20,blank=True, null=True)
    phone = models.CharField(max_length=13, blank=True, null=True)
    weixin = models.CharField(max_length=50, blank=True, null=True)
    status = models.BooleanField(default=False)
    timestamp = models.DateTimeField(auto_now_add=True, null=True)
    expire = models.IntegerField(default=1)

开发步骤:业务编写

本项目一共分为3个页面,分别是列表页、详情页、提交页。

我们一一讲解

首页

首先是首页,它的模版位于templates/app/index.html 它主要是用来展示首页内容, 并提交搜索词,到搜索接口,所有的接口都位于app/urls.py里面,如下

app_name = 'app'
urlpatterns = [
    path('index', views.IndexView.as_view(), name='index'),
    path('detail/<int:pk>', views.DetailView.as_view(), name='detail'),
    path('commit', views.CommitView.as_view(), name='commit')
]

我们设置首页的路由为IndexView, 开始编写IndexView的代码。它的代码非常简单:


class IndexView(generic.ListView):
    model = Product
    template_name = 'app/index.html'
    context_object_name = 'product_list'
    paginate_by = 15
    c = None

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        paginator = context.get('paginator')
        page = context.get('page_obj')
        page_list = get_page_list(paginator, page)
        context['c'] = self.c
        context['page_list'] = page_list
        return context

    def get_queryset(self):
        self.c = self.request.GET.get("c", None)
        if self.c:
            return Product.objects.filter(type=self.c).order_by('-timestamp')
        else:
            return Product.objects.filter(status=0).order_by('-timestamp')

详情页

我们再来开发详情页,从urls.py中看到,详情页是由DetailView来实现的,我们来窥探它的全貌:


class DetailView(generic.DetailView):
    model = Product
    template_name = 'app/detail.html'

    def get_object(self, queryset=None):
        obj = super().get_object()
        return obj

    def get_context_data(self, **kwargs):
        context = super(DetailView, self).get_context_data(**kwargs)
        return context

它很简单,继承了DetailView通用模板类来显示详情。

提交页

最后再来看一下提交页,它是由CommitView来实现的。同样是观看代码:

class CommitView(generic.CreateView):

    model = Product
    form_class = CommitForm
    template_name = 'app/commit.html'

    @ratelimit(key='ip', rate='2/m')
    def post(self, request, *args, **kwargs):
        was_limited = getattr(request, 'limited', False)
        if was_limited:
            messages.warning(self.request, "操作太频繁了,请1分钟后再试")
            return render(request, 'app/commit.html', {'form': CommitForm()})
        return super().post(request, *args, **kwargs)

    def get_success_url(self):
        messages.success(self.request, "发布成功! ")
        return reverse('app:commit')

它是继承自CreateView,因为是创建操作嘛,在post中,我们通过ratelimit来限制提交次数,防止恶意提交。

运行项目

python3 manage.py runserver

标签:get,python,self,二手,django,models,context,True,app
From: https://blog.51cto.com/u_16317510/8078209

相关文章

  • python的异常处理
    python的异常处理: Try-except语句   在上面的例子中,我们使用了两个占位符{}来表示要插入的变量的位置。然后,通过在format()方法中传递变量name和age来替换这些占位符。 你还可以通过在占位符{}中添加索引来指定要替换的参数的顺序。例如:  pythonname=......
  • django中正确创建数据库
    新手学习django创建数据库时,经常因为设置不当或者操作步骤不对而状况百出。这里梳理一下主要步骤和注意重点和大家共同学习。这里以sqlite数据库为例。首先,在创建完成项目和项目文件后,要将创建的文件添加到settings.py文件中的INSTALLED_APPS列表中,完成新建文件注册。第二步,编写mod......
  • Python拆分列中文和 字符
    需求描述:我们日常实际的工作中经常需要把一列数据按中文和数字或者字母单独拆分出来导入所需的库:importpandasaspd定义函数extract_characters,该函数接受三个参数:file_path(Excel文件路径)、sheet_name(工作表名称)和column_name(列名)。defextract_characters(file_path,......
  • Python环境下LaTeX数学公式转图像方案调研与探讨
    @目录引言方案一:基于LaTeX环境方案二:基于KaTeX(推荐)方案三:基于Matplotlib写在最后引言近来,涉及到一些公式识别的项目,输入是公式的图像,输出是LaTeX格式的数学公式字符串。这类项目一般都采用深度学习的方法来做,这就涉及到构造公式LaTeX字符串和对应渲染后图像的数据集。来训练......
  • Python第二章读书笔记-2023.10.28
    03运行超市抹零结账行为money_all=67.99+11.75+21.1+8.49+25.89+17.5+22.4money_all_str=str(money_all)print("商品总金额为:",money_all_str)money_real=int(money_all)money_real_str=str(money_real)print("实收金额为:",money_real_str)print("学号后四位3126"......
  • 解决使用mitmprox抓包可以访问网页,但是使用python request 调用该网站接口报错问题
    可能有几种原因导致这种情况。以下是一些常见的问题和可能的解决方法:证书验证问题:当你使用mitmproxy抓包时,它通常会生成自签名的SSL证书,以便进行中间人攻击检查。但在Python中使用requests库时,默认情况下,它会验证SSL证书的有效性。你需要禁用SSL验证,以便使用mitmproxy生成的证书......
  • 【Python】用Python生成图像特效
    1.引用本文重点介绍如何使用python进行图像处理,生成各式各样的图像特效。闲话少说,我们直接开始吧!2.读入图像首先我们来读取我们的样例图像,并尝试打印图像中相应元素的像素值。为了实现这一点,我们使用Python中的Pillow子模块进行实现,代码如下:fromPILimportImageimg=Image.o......
  • Python 作用域:局部作用域、全局作用域和使用 global 关键字
    变量只在创建它的区域内可用。这被称为作用域。局部作用域在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。示例:在函数内部创建的变量在该函数内部可用:defmyfunc():x=300print(x)myfunc()函数内部的函数如上面的示例所解释的那样,变量x在......
  • 手把手教你用python一键抢12306火车票(附代码)
    哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕…然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现一票难求!想回趟家真难!那么作为程序猿的你,当然要用程序猿的方式来抢票!下面分享用python来抢票!欢迎关注公众号:每日推荐系列,提供各种免费资源!也可以咨询代码问......
  • Python 作用域:局部作用域、全局作用域和使用 global 关键字
    变量只在创建它的区域内可用。这被称为作用域。局部作用域在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。示例:在函数内部创建的变量在该函数内部可用:defmyfunc():x=300print(x)myfunc()函数内部的函数如上面的示例所解释的那样,变量x......