【django】校易论坛网源码apps.py和urls.py和views.py

from django.apps import AppConfig


class AppConfig(AppConfig):
    name = 'app'
===============================

"""bbspro URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""

from django.conf.urls import url

from app import views


urlpatterns = [
    
    url(r"^$",views.index),
    url(r"^goods-(?P<gd_id>\d+)$",views.goodsdetail,name="goodsf"), # 未登录情况下商品详情
    url(r"^(?P<school_id>\d+)/goods-(?P<gd_id>\d+)$",views.goodsdetail,name="goodst"), # 登录情况下商品详情
    url(r"^(?P<school_id>\d+)/goods-(?P<gd_id>\d+)/(?P<parent_comment_id>\d+)$",views.goodsdetail,name="replycomment"), # 登录情况下的二级回复
    url(r"^login/$",views.login,name="login"),
    url(r"^register/$",views.register,name="register"),
    url(r"^register/invite-(?P<invite_code>.+?)$",views.register,name="invite"), # 邀请链接
    url(r"^personal/$",views.personal,name="personal"),
    url(r"^campus-(?P<school_id>\d+)/fb",views.goodscreate,name="creategoods"), # 发布商品
    url(r"^allcampus\?p=(?P<pg_id>\d+)$",views.campus,name="allcampus"), # 未登录情况下校园列表
    url(r"^campus-(?P<school_id>\d+)\?p=(?P<pg_id>\d+)$",views.campus,name="campus"), # 登录情况下校园列表
    url(r"^helpinfo/$",views.helpinfo,name="helpinfo"),
    url(r"^logout/$",views.logout,name="logout"),
    url(r"^boss/$",views.boss,name="boss"),
    url(r"^overview/$",views.overview,name="overview"), # 概览页面
    url(r"^myfb-(?P<pg_id>\d+)$",views.myfb,name="myfb"), # 我的发布
    url(r"^mycollect-(?P<pg_id>\d+)$",views.mycollect,name="mycollect"), # 我的收藏
    url(r"^accountdetail-(?P<pg_id>\d+)$",views.accountdetail,name="accountdetail"), # 账户明细
    url(r"^getinvites-(?P<pg_id>\d+)$",views.getinvites,name="getinvites"), # 邀请列表
    url(r"^getsigns-(?P<pg_id>\d+)$",views.getsigns,name="getsigns"), #签到列表
    url(r"^myinfo/$",views.myinfo,name="myinfo"), #个人信息
    url(r"^feedback/$",views.feedback,name="feedback"), # 反馈
    url(r"^getVerifyCode/",views.getVerifyCode,name="getVerifyCode"), # 验证码
    url(r"^update/(?P<gd_id>\d+)$",views.updategoods,name="updategoods"), # 更新商品
    url(r"^report/(?P<gd_id>\d+)$",views.report,name="report"), # 举报
    url(r"^collectgoods/",views.collectgoods,name="collectgoods"), # 收藏
    url(r"^delgoods/",views.delgoods,name="delgoods"), # 删除
    url(r"^updategd/$",views.updategd,name="updategd"), # 更新
    url(r"^signin/$",views.signin,name="signin") #签到
    
    
    
]
====================================

import datetime
import io
import random
import re

from PIL import ImageDraw
from PIL import ImageFont, Image
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage, \
    InvalidPage
from django.db.models.query_utils import Q
from django.db.utils import IntegrityError
from django.http import HttpResponse
from django.shortcuts import render_to_response, redirect, render, \
    get_object_or_404
from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt

from app import models
from app.forms.forms import CommentForm
from app.models import Player, Boss, School, City, Province, Goods, Goodspic, \
    Comments, Invites, Collects, Accountdetail, Signin, FeedBack, Report
from apscheduler.scheduler import Scheduler


#获取随机颜色
def get_random_color():
    R=random.randrange(255)
    G=random.randrange(255)
    B=random.randrange(255)
    return(R,G,B)

#验证码视图
def getVerifyCode(request):
    bg_color=(245,245,245) # 定义画布背景
    img_size=(90,34) # 定义画布大小
    image=Image.new("RGB",img_size,bg_color) # 定义画布
    draw=ImageDraw.Draw(image,"RGB") # 定义画笔
    # 创建字体(字体的路径,服务器路径)
    font_path = 'D:/eclipse/works/bbspro/src/static/fonts/AdobeArabic-2.ttf'
    # 实例化字体,设置大小是30
    font = ImageFont.truetype(font_path, 30)
    # 准备画布上的字符集
    source = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"
    # 保存每次随机出来的字符
    code_str = ""
    for i in range(4):
        # 获取数字随机颜色
        text_color = get_random_color()
        # 获取随机数字 len
        tmp_num = random.randrange(len(source))
        # 获取随机字符 画布上的字符集
        random_str = source[tmp_num]
        # 将每次随机的字符保存(遍历) 随机四次
        code_str += random_str
        # 将字符画到画布上
        draw.text((5 + 20*i, -2), random_str, text_color, font)
    #噪点干扰线
    width=90
    height=34
    for i in range(10):
        x1=random.randint(0,width)
        x2=random.randint(0,width)
        y1=random.randint(0,height)
        y2=random.randint(0,height)
        draw.line((x1,x2,y1,y2),fill=get_random_color())
    
    for i in range(10):
        draw.point([random.randint(0,width),random.randint(0,height)], fill=get_random_color())
        x=random.randint(0,width)
        y=random.randint(0,height)
        draw.arc((x,y,x+4,y+4),0,90,fill=get_random_color())

    # 记录给哪个请求发了什么验证码
    request.session['code'] = code_str
 
    # 获得一个缓存区
    buf = io.BytesIO()
    # 将图片保存到缓存区
    image.save(buf, 'png')
    # 将缓存区的内容返回给前端 .getvalue 是把缓存区的所有数据读取
    return HttpResponse(buf.getvalue(), 'image/png')

#登录页面
def login(request):
    uname=request.session.get("username","")
    scode=request.session.get("code","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        return redirect("/personal/")
    elif ubossname:
        return redirect("/boss/")
    else:
        err_msg=code_msg=""
        if request.method=="POST":
            username=request.POST.get("username")
            password=request.POST.get("password")
            safecode=request.POST.get("safecode")
            if str(safecode).lower()!=str(scode).lower():
                code_msg="验证码错误"
            
            else:
                playinfo=Player.objects.filter(player_username=username,
                                           player_password=password)
         
                bossinfo=Boss.objects.filter(bossname=username,
                                         bosspsw=password)
            
                if playinfo:
                    pinfo=Player.objects.get(player_username=username)
                    sinfo=School.objects.get(id=pinfo.player_school_id)
                    models.Player.objects.filter(player_username=username).update(last_time=timezone.now())
                    request.session["username"]=username
                    request.session["schoolid"]=sinfo.school_id
                    return redirect("/personal/")
         
                elif bossinfo:
                    request.session["username"]=username
                    return redirect("/boss/")
         
                else:
                    err_msg="账号或密码错误,请重新登录"
        
    return render(request,"login.html",{"err_msg":err_msg,
                                        "code_msg":code_msg
                                        })  


#注册页面
def register(request,invite_code=None):
    codenum=0
    uname=request.session.get("username","")
    scode=request.session.get("code","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    
    if invite_code:
        codenum=1 # 邀请注册
        codeexist=get_object_or_404(Player,player_username=invite_code)
        if codeexist:
            if uplayname:
                return redirect("/personal/")
            elif ubossname:
                return redirect("/boss/")
            
            else:
                errname_msg=errpsw_msg=errcopypsw_msg=errphone_msg=erremail_msg=errschool_msg=errcode_msg=""
                if request.method=="POST":
                    username=request.POST.get("username")
                    password=request.POST.get("password")
                    copypsw=request.POST.get("copypassword")
                    phone=request.POST.get("phone")
                    email=request.POST.get("email")
                    schoolname=request.POST.get("school")
                    safecode=request.POST.get("safecode")
                    try:
                        schoolinfo=School.objects.get(school_name=schoolname)
                    except:
                        errschool_msg="该校不存在,请联系管理员添加"
                    existname=Player.objects.filter(player_username=username) 
                    exitphone=Player.objects.filter(player_tel=phone)
                    exitemail=Player.objects.filter(player_mail=email)
                    # 校验
                    if not username:
                        errname_msg="账号不能为空"
                    elif not password:
                        errpsw_msg="密码不能为空"
                    elif not copypsw:
                        errcopypsw_msg="确认密码不能为空"
                    elif not phone:
                        errphone_msg="手机号不能为空"
                    elif not email:
                        erremail_msg="邮箱不能为空"
                    elif not re.match(r"^[a-zA-Z][a-zA-Z0-9]{5,19}$",username):
                        errname_msg="请输入6-20个字符的账号"
                    elif not re.match(r"^[a-zA-Z0-9]{6,20}$",password):
                        errpsw_msg="请输入6-20个字符的密码"
                    elif password != copypsw:
                        errcopypsw_msg="两次输入的密码不一致"
                    elif not re.match(r"^1[0-9]{10}$",phone):
                        errphone_msg="请输入1开的11位纯数字的手机号码"
                    elif not re.match(r"^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$",email):
                        erremail_msg="请输入正确的邮箱"
                    elif existname:
                        errname_msg="该账号已注册"
                    elif exitphone:
                        errphone_msg="该手机已注册"
                    elif exitemail:
                        erremail_msg="该邮箱已注册"
                    elif str(safecode).lower()!=str(scode).lower():
                        errcode_msg="验证码错误"
                    else:
                        # 注册信息
                        Player.objects.get_or_create(player_username=username,
                                              player_password=password,
                                              player_tel=phone,
                                              player_mail=email,
                                              player_school_id=schoolinfo.id
                                              )
                        # 邀请信息
                        inviter=Player.objects.get(player_username=invite_code)
                        beinviter=Player.objects.get(player_username=username)
                        Invites.objects.create(invite_name_id=inviter.id,
                                               beinvite_name_id=beinviter.id
                                               )
                        
                        #更新邀请数
                        inviter.invitenum+=1
                        inviter.save(update_fields=["invitenum"])
                        return redirect("/login/")   
                        
                        
    else:
        codenum=2 # 非邀请注册
        if uplayname:
            return redirect("/personal/")
        elif ubossname:
            return redirect("/boss/")
        else:
            errname_msg=errpsw_msg=errcopypsw_msg=errphone_msg=erremail_msg=errschool_msg=errcode_msg=""
            if request.method=="POST":
                username=request.POST.get("username")
                password=request.POST.get("password")
                copypsw=request.POST.get("copypassword")
                phone=request.POST.get("phone")
                email=request.POST.get("email")
                schoolname=request.POST.get("school")
                safecode=request.POST.get("safecode")
                try:
                    schoolinfo=School.objects.get(school_name=schoolname)
                except:
                    errschool_msg="该校不存在,请联系管理员添加"
                existname=Player.objects.filter(player_username=username) 
                exitphone=Player.objects.filter(player_tel=phone)
                exitemail=Player.objects.filter(player_mail=email)
                # 校验
                if not username:
                    errname_msg="账号不能为空"
                elif not password:
                    errpsw_msg="密码不能为空"
                elif not copypsw:
                    errcopypsw_msg="确认密码不能为空"
                elif not phone:
                    errphone_msg="手机号不能为空"
                elif not email:
                    erremail_msg="邮箱不能为空"
                elif not re.match(r"^[a-zA-Z][a-zA-Z0-9]{5,19}$",username):
                    errname_msg="请输入6-20个字符的账号"
                elif not re.match(r"^[a-zA-Z0-9]{6,20}$",password):
                    errpsw_msg="请输入6-20个字符的密码"
                elif password != copypsw:
                    errcopypsw_msg="两次输入的密码不一致"
                elif not re.match(r"^1[0-9]{10}$",phone):
                    errphone_msg="请输入1开的11位纯数字的手机号码"
                elif not re.match(r"^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$",email):
                    erremail_msg="请输入正确的邮箱"
                elif existname:
                    errname_msg="该账号已注册"
                elif exitphone:
                    errphone_msg="该手机已注册"
                elif exitemail:
                    erremail_msg="该邮箱已注册"
                elif str(safecode).lower()!=str(scode).lower():
                    errcode_msg="验证码错误"
                else:
                    Player.objects.get_or_create(player_username=username,
                                           player_password=password,
                                           player_tel=phone,
                                           player_mail=email,
                                           player_school_id=schoolinfo.id
                                           )
                    return redirect("/login/")
 
    return render(request,"register.html",{"errname_msg":errname_msg,
                                           "errpsw_msg":errpsw_msg,
                                           "errcopypsw_msg":errcopypsw_msg,
                                           "errphone_msg":errphone_msg,
                                           "erremail_msg":erremail_msg,
                                           "errschool_msg":errschool_msg,
                                           "codenum":codenum,
                                           "invite_code":invite_code,
                                           "errcode_msg":errcode_msg
                                           })

#首页
def index(request):
    uname=request.session.get("username","")
    school_id=request.session.get("schoolid","")
    
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        return render(request,"index.html",{"uname":uname,
                                            "school_id":school_id,
                                            })
    elif ubossname:
        return redirect("/boss/")
    else:
        return render_to_response("index.html")

# 个人中心页面
def personal(request):
    uname=request.session.get("username","")
    school_id=request.session.get("schoolid","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        playinfo=Player.objects.get(player_username=uname)

        return render(request,"personal.html",{"uname":uname,
                                               "school_id":school_id,
                                               "playinfo":playinfo
                                               })
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")

# 个人中心 概览
def overview(request):
    baseurl=request.get_host()
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        playinfo=Player.objects.get(player_username=uname)
        phonehidden=str(playinfo.player_tel)[0:3]+"****"+str(playinfo.player_tel)[-4:-1]
        scholinfo=School.objects.get(id=playinfo.player_school_id)
        inviteurl="http://"+baseurl+"/register/invite-"+uname
        # 获取日期
        signinfo=Signin.objects.filter(sign_player_id=playinfo.id).order_by("-signtime")
        signstatus=0
        sign_msg=""
        if signinfo:
            recentsigndate=signinfo.first().signtime.strftime("%Y-%m-%d")
            todaydate=datetime.datetime.now().strftime("%Y-%m-%d")
            if recentsigndate==todaydate:
                signstatus=1
                sign_msg="您今天签到成功,+10豆点!"
            else:
                signstatus=-1
                sign_msg="您今天还没签到哦!"
        else:
            signstatus=-1
            sign_msg="您今天还没签到哦!"  
            
            
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/") 
    
    
    
    return render(request,"overview.html",{"playinfo":playinfo,
                                              "phonehidden":phonehidden,
                                              "scholinfo":scholinfo,
                                              "inviteurl":inviteurl,
                                              "signstatus":signstatus,
                                              "sign_msg":sign_msg
                                              })

#签到 ajax
def signin(request):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    if uplayname:
        playinfo=Player.objects.get(player_username=uname)
        if request.method=="POST":
            todaydate=datetime.datetime.now().strftime("%Y-%m-%d")
            signtime=datetime.datetime.now()
            signnum=request.POST.get("signnum")
            try:
                Signin.objects.get_or_create(signtime=signtime,
                                                 signstatus=signnum,
                                                 sign_jf=10,
                                                 sign_player_id=playinfo.id,
                                                 sign_date=todaydate)
                return HttpResponse('{"result":"success"}',content_type="application.json")
            except:
                return HttpResponse('{"result":"fail"}',content_type="application.json")
                
            


# 个人中心 我的发布
def myfb(request,pg_id=None):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    
    if uplayname:
        playinfo=Player.objects.get(player_username=uname)
        goods_list=Goods.objects.all().filter(Q(goods_author_id=playinfo.id)&Q(goods_del=1)).order_by("-goods_updatetime")
        # 分页
        paginator=Paginator(goods_list,10)
        pg_id=int(pg_id)
        try:
            gdslist=paginator.page(pg_id)
        except PageNotAnInteger:
            gdslist=paginator.page(1)
        except InvalidPage:
            gdslist=paginator.page(1)
        except EmptyPage:
            gdslist=paginator.page(paginator.num_pages)
        if paginator.num_pages>5:
            if pg_id-3<1:
                pgrange=range(1,6)
            elif pg_id+3>paginator.num_pages:
                pgrange=range(paginator.num_pages-4,paginator.num_pages+1)
            else:
                pgrange=range(pg_id-2,pg_id+3)
        else:
            pgrange=paginator.page_range
        
            
        return render(request,"myfb.html",{"pg_id":pg_id,
                                      "goods_list":goods_list,
                                      "gdslist":gdslist,
                                      "paginator":paginator,
                                      "pgrange":pgrange
                                      })
            
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")
    
    
    


# 个人中心 我的收藏
def mycollect(request,pg_id=None):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        playinfo=Player.objects.get(player_username=uname)
        collects_list=Collects.objects.all().filter(collects_player_id=playinfo.id).order_by("-collects_time")
        # 分页
        paginator=Paginator(collects_list,10)
        pg_id=int(pg_id)
        try:
            collectlist=paginator.page(pg_id)
        except PageNotAnInteger:
            collectlist=paginator.page(1)
        except InvalidPage:
            collectlist=paginator.page(1)
        except EmptyPage:
            collectlist=paginator.page(paginator.num_pages)
        if paginator.num_pages>5:
            if pg_id-3<1:
                pgrange=range(1,6)
            elif pg_id+3>paginator.num_pages:
                pgrange=range(paginator.num_pages-4,paginator.num_pages+1)
            else:
                pgrange=range(pg_id-2,pg_id+3)
        else:
            pgrange=paginator.page_range
        
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")
            
    return render(request,"mycollect.html",{"pg_id":pg_id,
                                            "collects_list":collects_list,
                                            "collectlist":collectlist,
                                            "paginator":paginator,
                                            "pgrange":pgrange
                                            })

# 个人中心 账户明细
def accountdetail(request,pg_id):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        playinfo=Player.objects.get(player_username=uname)
        account_list=Accountdetail.objects.all().filter(adplayer_id=playinfo.id).order_by("-detailtime")
        #分页
        paginator=Paginator(account_list,10)
        pg_id=int(pg_id)
        try:
            accountlist=paginator.page(pg_id)
        except PageNotAnInteger:
            accountlist=paginator.page(1)
        except InvalidPage:
            accountlist=paginator.page(1)
        except EmptyPage:
            accountlist=paginator.page(paginator.num_pages)
        if paginator.num_pages>5:
            if pg_id-3<1:
                pgrange=range(1,6)
            elif pg_id+3>paginator.num_pages:
                pgrange=range(paginator.num_pages-4,paginator.num_pages+1)
            else:
                pgrange=range(pg_id-2,pg_id+3)
        else:
            pgrange=paginator.page_range
        
        
        
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")
    
    return render(request,"accountdetail.html",{"pg_id":pg_id,
                                                "paginator":paginator,
                                                "account_list":account_list,
                                                "accountlist":accountlist,
                                                "pgrange":pgrange
                                                })


# 个人中心 我的邀请列表
def getinvites(request,pg_id=None):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    
    if uplayname:
        playinfo=Player.objects.get(player_username=uname)
        invite_list=Invites.objects.all().filter(invite_name_id=playinfo.id).order_by("-invite_time")
        # 分页
        paginator=Paginator(invite_list,10)
        pg_id=int(pg_id)
        try:
            invitelist=paginator.page(pg_id)
        except PageNotAnInteger:
            invitelist=paginator.page(1)
        except InvalidPage:
            invitelist=paginator.page(1)
        except EmptyPage:
            invitelist=paginator.page(paginator.num_pages)
        if paginator.num_pages>5:
            if pg_id-3<1:
                pgrange=range(1,6)
            elif pg_id+3>paginator.num_pages:
                pgrange=range(paginator.num_pages-4,paginator.num_pages+1)
            else:
                pgrange=range(pg_id-2,pg_id+3)
        else:
            pgrange=paginator.page_range
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")
    return render(request,"invitelist.html",{"pg_id":pg_id,
                                      "invitelist":invitelist,
                                      "pgrange":pgrange,
                                      "paginator":paginator
                                      })

# 个人中心 签到列表
def getsigns(request,pg_id):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        uplayinfo=Player.objects.get(player_username=uname)
        sign_list=Signin.objects.all().filter(sign_player_id=uplayinfo.id).order_by("-signtime")
        # 分页
        paginator=Paginator(sign_list,10)
        pg_id=int(pg_id)
        try:
            signlist=paginator.page(pg_id)
        except PageNotAnInteger:
            signlist=paginator.page(1)
        except InvalidPage:
            signlist=paginator.page(1)
        except EmptyPage:
            signlist=paginator.page(paginator.num_pages)
        if paginator.num_pages>5:
            if pg_id-3<1:
                pgrange=range(1,6)
            elif pg_id+3>paginator.num_pages:
                pgrange=range(paginator.num_pages-4,paginator.num_pages+1)
            else:
                pgrange=range(pg_id-2,pg_id+3)
        else:
            pgrange=paginator.page_range
        
        
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")
    
    return render(request,"signlist.html",{"pg_id":pg_id,
                                           "paginator":paginator,
                                           "signlist":signlist,
                                           "pgrange":pgrange
                                           })


#个人中心 我的信息

def myinfo(request):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        playinfo=Player.objects.get(player_username=uname)
        schoolinfo=School.objects.get(id=playinfo.player_school_id)
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")
    
    return render(request,"myinfo.html",{"playinfo":playinfo,
                                         "schoolinfo":schoolinfo
                                         })


# 个人中心 反馈
def feedback(request):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        feedback_msg=""
        playinfo=Player.objects.get(player_username=uname)
        if request.method=="POST":
            feedbackinfo=request.POST.get("feedback")
            feedbacktime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
            if feedbackinfo=="":
                feedback_msg="提交内容不能为空!"
            else:
                try:
                    FeedBack.objects.get_or_create(feedbackcontent=feedbackinfo,
                                        feedbackauth_id=playinfo.id,
                                        limittime=feedbacktime
                                        )
                    feedback_msg="提交成功!"
                except IntegrityError:
                    feedback_msg="请勿重复提交!"
        return render(request,"feedback.html",{"feedback_msg":feedback_msg
                                               })  
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")
    

# 校园专区
def campus(request,school_id=None,pg_id=1):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        s_info=get_object_or_404(School,school_id=school_id)
        city_info=City.objects.get(id=s_info.school_city_id)
        province_info=Province.objects.get(id=city_info.city_pro_id)
        schoolname=s_info.school_name
        schooladress="地址:"+province_info.province_name+city_info.city_name+s_info.school_address
        nowtime=datetime.datetime.now()
        # 获取所有学生信息
        stinfo=Player.objects.filter()
        
        # 统计该校学生信息
        stucount=Player.objects.filter(player_school_id=s_info.id)
        open_msg="该校注册未满2人,暂未开通!"
        
        # 对该校的商品进行排序
        goods_list=Goods.objects.all().filter(Q(goods_school_id=s_info.id)&Q(goods_del=1)).order_by("-goods_updatetime")
        gds_msg="还未发布闲置物品哦~"
        
        # 分页
        paginator=Paginator(goods_list,10)
        pg_id=int(pg_id)
        try:
            # 获取当前页内容
            gdslist=paginator.page(pg_id)
        except PageNotAnInteger:
            gdslist=paginator.page(1)
        except InvalidPage:
            gdslist=paginator.page(1)
        except EmptyPage:
            gdslist=paginator.page(paginator.num_pages)
        
        if paginator.num_pages>5:
            if pg_id-3<1:
                pgrange=range(1,6)
            elif pg_id+3>paginator.num_pages:
                pgrange=range(paginator.num_pages-4,paginator.num_pages+1)
            else:
                pgrange=range(pg_id-2,pg_id+3)
        else:
            pgrange=paginator.page_range


             
        return render(request,"campus.html",{"uname":uname,
                                             "schoolname":schoolname,
                                             "schooladress":schooladress,
                                             "school_id":school_id,
                                             "stucount":stucount,
                                             "open_msg":open_msg,
                                             "goods_list":goods_list,
                                             "gds_msg":gds_msg,
                                             "paginator":paginator,
                                             "pg_id":pg_id,
                                             "gdslist":gdslist,
                                             "pgrange":pgrange,
                                             "stinfo":stinfo,
                                             "nowtime":nowtime
                                             })
        
    elif ubossname:
        return redirect("/boss/")
    else:
        # 获取所有学生信息
        stinfo=Player.objects.filter()
        goods_list=Goods.objects.all().filter(goods_del=1).order_by("-goods_updatetime")
        gds_msg="还未发布闲置物品哦~"
        paginator=Paginator(goods_list,10)
        pd_id=int(pg_id)
        try:
            # 获取当前页面内容
            gdslist=paginator.page(pg_id)
        except PageNotAnInteger:
            gdslist=paginator.page(1)
        except InvalidPage:
            gdslist=paginator.page(1)
        except EmptyPage:
            gdslist=paginator.page(paginator.num_pages)
        
        if paginator.num_pages>5:
            if pg_id-3<1:
                pgrange=range(1,6)
            elif pg_id+3>paginator.num_pages:
                pgrange=range(paginator.num_pages-4,paginator.num_pages+1)
            else:
                paginator=range(pg_id-2,pg_id+3)
        else:
            pgrange=paginator.page_range
            
        
        
        
        return render(request,"campus.html",{"uname":uname,
                                             "goods_list":goods_list,
                                             "gds_msg":gds_msg,
                                             "paginator":paginator,
                                             "pg_id":pg_id,
                                             "gdslist":gdslist,
                                             "pgrange":pgrange,
                                             "pd_id":pd_id,
                                             "stinfo":stinfo
                                             })


#详情页面    
@csrf_exempt
def goodsdetail(request,school_id=None,gd_id=None,parent_comment_id=None):
    
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    
    ubossname=Boss.objects.filter(bossname=uname)
    gds=get_object_or_404(Goods,id=gd_id)
    playinfo=Player.objects.get(id=gds.goods_author_id)
    schoolinfo=School.objects.get(id=playinfo.player_school_id)
    picinfo=Goodspic.objects.filter(pic_goods_id=gd_id)
    gds.goods_views+=1
    gds.save(update_fields=["goods_views"])
    
    
    comments=Comments.objects._mptt_filter(goods_id=gd_id)
    
    
    
    if uplayname:
        pinfo=Player.objects.get(player_username=uname)
        s_info=get_object_or_404(School,school_id=school_id)
        city_info=City.objects.get(id=s_info.school_city_id)
        province_info=Province.objects.get(id=city_info.city_pro_id)
        schoolname=s_info.school_name
        schooladress="地址:"+province_info.province_name+city_info.city_name+s_info.school_address
        existcollect=Collects.objects.filter(Q(collects_player_id=pinfo.id)&Q(collects_goods_id=gd_id))
            
        if request.method=="POST":
            comment_form=CommentForm(request.POST)
            limittimes=datetime.datetime.now().strftime("%Y-%m-%d %H:%M") # 限制时间到分
            if comment_form.is_valid():
                new_comment=comment_form.save(commit=False)
                new_comment.goods_id=gd_id
                new_comment.commentuser_id=pinfo.id
                new_comment.commentusername=uname
                
                # 二级评论
                if parent_comment_id:
                    parent_comment=Comments.objects.get(id=parent_comment_id) 
                    new_comment.parent_id=parent_comment.get_root().id
                    new_comment.reply_to_id=parent_comment.commentuser_id
                    new_comment.replyname=parent_comment.commentusername
                    new_comment.commentusername=uname
                    new_comment.save()
                    redirecturl="/"+str(school_id)+"/goods-"+str(gd_id)
                    return redirect(redirecturl)
                
                new_comment.save()
                redirecturl="/"+str(school_id)+"/goods-"+str(gd_id)
                return redirect(redirecturl)
                
                
        return render(request,"goodsdetail.html",{"uname":uname,
                                                  "school_id":school_id,
                                                  "schoolname":schoolname,
                                                  "schooladress":schooladress,
                                                  "gds":gds,
                                                  "gd_id":gd_id,
                                                  "uplayname":uplayname,
                                                  "playinfo":playinfo,
                                                  "schoolinfo":schoolinfo,
                                                  "picinfo":picinfo,
                                                  "comments":comments,
                                                  "parent_comment_id":parent_comment_id,
                                                  "existcollect":existcollect
                                                  })
        
    elif ubossname:
        return redirect("/boss/")
    else:
        return render(request,"goodsdetail.html",{"uname":uname,
                                                  "gds":gds,
                                                  "gd_id":gd_id,
                                                  "playinfo":playinfo,
                                                  "schoolinfo":schoolinfo,
                                                  "picinfo":picinfo,
                                                  "comments":comments
                                                  })

# 收藏功能 ajax
@csrf_exempt
def collectgoods(request):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    if request.method=="POST":
        
        if uplayname:
            uinfo=Player.objects.get(player_username=uname)
            gd_id=request.POST.get("gd_id")
         
            existcollect=Collects.objects.filter(Q(collects_goods_id=gd_id)&Q(collects_player_id=uinfo.id))
            if existcollect:
                # 已经存在收藏记录 执行的是取消收藏功能
                existcollect.delete()
                Goods.objects.get(id=gd_id).changecollects(num=-1)
                return HttpResponse('{"col_status":"success","col_msg":"添加收藏"}',content_type='application/json')
            else:
                coltime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                try:
                    Goods.objects.get(id=gd_id).changecollects(num=1)
                    Collects.objects.get_or_create(collects_player_id=uinfo.id,collects_goods_id=gd_id,collects_time=coltime)
                    return HttpResponse('{"col_status":"success","col_msg":"取消收藏"}',content_type='application/json')
                except IntegrityError:
                    return HttpResponse('{"col_status":"fail","col_msg":"请勿重复收藏"}',content_type='application/json')    
         
        else:
            return HttpResponse('{"col_status":"fail","col_msg":"用户未登录"}',content_type='application/json')


# 删除功能ajax
def delgoods(request):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    if uplayname:
        if request.method=="POST":
            gdid=request.POST.get("gd_id")
            try:
                goodinfo=Goods.objects.get(id=gdid)
                goodinfo.goods_del=-1
                goodinfo.save()
                return HttpResponse('{"result":"success"}',content_type='application.json')
            except:
                return HttpResponse('{"result":"fail"}',content_type='application.json')
                
                
# 更新功能 ajax
def updategd(request):
    uname=request.session.get("username","")
    uplayname=Player.objects.get(player_username=uname)
    if uplayname:
        if request.method=="POST":
            gdid=request.POST.get("gd_id")
            try:
                nowti=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                goodsinfo=Goods.objects.get(id=gdid)
                goodsinfo.goods_updatetime=nowti
                goodsinfo.save()
                return HttpResponse('{"result":"success"}',content_type="application.json")
            except:
                return HttpResponse('{"result":"fail"}',content_type="application.json")
                
                    


#发布页面
def goodscreate(request,school_id):
    
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    
    if uplayname:
        # 获取学校相关信息
        s_info=get_object_or_404(School,school_id=school_id)
        city_info=City.objects.get(id=s_info.school_city_id)
        province_info=Province.objects.get(id=city_info.city_pro_id)
        schoolname=s_info.school_name
        schooladress="地址:"+province_info.province_name+city_info.city_name+s_info.school_address
        
        playinfo=Player.objects.get(player_username=uname) # 取登录玩家信息
        playschool=School.objects.get(id=playinfo.player_school_id) # 取登录玩家所属学校信息
        
        title_msg=img_msg=newprice_msg=oldprice_msg=newpercent_msg=trademodel_msg=detailinput_msg=fail_msg=""
        if request.method=="POST":
             
            title=request.POST.get("crtitle")
            newprice=request.POST.get("newprice")
            oldprice=request.POST.get("oldprice")
            newpercent=request.POST.get("newpercent")
            trademodel=request.POST.get("trademodel")
            detailinput=request.POST.get("detailinput")
            image1=request.FILES.get("image1",None)
            image2=request.FILES.get("image2",None)
            image3=request.FILES.get("image3",None)
            image4=request.FILES.get("image4",None)
            image5=request.FILES.get("image5",None)
            image6=request.FILES.get("image6",None)
            if not title:
                title_msg="标题不能为空"
            elif (not image1) and (not image2) and (not image3) and (not image4) and (not image5) and (not image6):
                img_msg="请上传最少一张图片"
            elif not newprice:
                newprice_msg="现价不能为空"
            elif not oldprice:
                oldprice_msg="原价不能为空"
            elif not newpercent:
                newpercent_msg="成新不能为空"
            elif not trademodel:
                trademodel_msg="交易方式不能为空"
            elif not detailinput:
                detailinput_msg="详情不能为空"
            else:

                nowtime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                limitminute=datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
                try:
                    
                    Goods.objects.get_or_create(goods_title=title,
                                            goods_createtime=nowtime,
                                            goods_firstphoto=image1,
                                            goods_price=newprice,
                                            goods_orgprice=oldprice,
                                            goods_newold=newpercent,
                                            goods_trademethod=trademodel,
                                            goods_detail=detailinput,
                                            goods_author_id=playinfo.id,
                                            goods_school_id=s_info.id,
                                            goods_updatetime=nowtime,
                                            limitminute=limitminute
                                            )
                    lastinfo=Goods.objects.filter(goods_author_id=playinfo.id).last() # 取出该玩家最新创建的一条数据
                    lastinfo.goods_firstphoto="/media/"+str(lastinfo.goods_firstphoto)
                    lastinfo.save(update_fields=["goods_firstphoto"])
                    # 存入图片
                    imgall=[]
                    imgall.append(image2)
                    imgall.append(image3)
                    imgall.append(image4)
                    imgall.append(image5)
                    imgall.append(image6)
                    for imgone in imgall:
                        if imgone:
                            Goodspic.objects.get_or_create(goods_pic=imgone,
                                                       pic_goods_id=lastinfo.id
                                                       )
                            gdpicinfo=Goodspic.objects.filter(pic_goods_id=lastinfo.id).last()
                            gdpicinfo.goods_pic="/media/"+str(gdpicinfo.goods_pic)
                            gdpicinfo.save(update_fields=["goods_pic"])
                            
                    redirecturl="/"+str(school_id)+"/goods-"+str(lastinfo.id)
                    return redirect(redirecturl) # 跳转到对应创建的详情页面    
                        
                except:
                    fail_msg="请勿重复提交!"        

        return render(request,"goodscreate.html",{"uname":uname,
                                                  "school_id":school_id,
                                                  "schoolname":schoolname,
                                                  "schooladress":schooladress,
                                                  "uplayname":uplayname,
                                                  "playinfo":playinfo,
                                                  "playschool":playschool,
                                                  "title_msg":title_msg,
                                                  "img_msg":img_msg,
                                                  "newprice_msg":newprice_msg,
                                                  "oldprice_msg":oldprice_msg,
                                                  "newpercent_msg":newpercent_msg,
                                                  "trademodel_msg":trademodel_msg,
                                                  "detailinput_msg":detailinput_msg,
                                                  "fail_msg":fail_msg
                                                  })
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")

# 帮助中心
def helpinfo(request):
    uname=request.session.get("username","")
    school_id=request.session.get("schoolid","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        
        return render(request,"helpinfo.html",{"uname":uname,
                                               "school_id":school_id
                                               })
    elif ubossname:
        return redirect("/boss/")
    else:
        return render_to_response("helpinfo.html")

#退出
def logout(request):
    request.session.flush()
    return redirect("/login/")

# 管理员后台

def boss(requset):
    uname=requset.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        return redirect("/personal/")
    elif ubossname:
        return render(requset,"boss.html",{"uname":uname})
    else:
        redirect("/login/")

# 修改商品
def updategoods(request,gd_id):
    uname=request.session.get("username","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        goodsinfo=get_object_or_404(Goods,id=gd_id)
        s_info=get_object_or_404(School,id=goodsinfo.goods_school_id)
        city_info=City.objects.get(id=s_info.school_city_id)
        province_info=Province.objects.get(id=city_info.city_pro_id)
        schoolname=s_info.school_name
        schooladress="地址:"+province_info.province_name+city_info.city_name+s_info.school_address
        u_info=Player.objects.get(player_username=uname)
        playerschool=School.objects.get(id=u_info.player_school_id)
        
        allpic=Goodspic.objects.filter(pic_goods_id=gd_id)
        piclen=len(allpic)
        initcount=piclen+1
        srcall=[]
        for num in range(piclen):
            srcall.append(allpic[num].goods_pic)
        title_msg=img_msg=newprice_msg=oldprice_msg=newpercent_msg=trademodel_msg=detailinput_msg=""
        if request.method=="POST":
            title=request.POST.get("crtitle")
            newprice=request.POST.get("newprice")
            oldprice=request.POST.get("oldprice")
            newpercent=request.POST.get("newpercent")
            trademodel=request.POST.get("trademodel")
            detailinput=request.POST.get("detailinput")
            image1=request.FILES.get("image1",None)
            image2=request.FILES.get("image2",None)
            image3=request.FILES.get("image3",None)
            image4=request.FILES.get("image4",None)
            image5=request.FILES.get("image5",None)
            image6=request.FILES.get("image6",None)
            print(image1)
            print(image2)
            print(image3)
            print(image4)
            print(image5)
            print(image6)
            if not title:
                title_msg="标题不能为空"
            elif (not image1) and (not image2) and (not image3) and (not image4) and (not image5) and (not image6):
                img_msg="请上传最少一张图片"
            elif not newprice:
                newprice_msg="现价不能为空"
            elif not oldprice:
                oldprice_msg="原价不能为空"
            elif not newpercent:
                newpercent_msg="成新不能为空"
            elif not trademodel:
                trademodel_msg="交易方式不能为空"
            elif not detailinput:
                detailinput_msg="详情不能为空"
            else:
                nowtime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                g=Goods.objects.get(id=gd_id)
                g.goods_title=title
                g.goods_firstphoto=image1
                g.goods_price=newprice
                g.goods_orgprice=oldprice
                g.goods_newold=newpercent
                g.goods_trademethod=trademodel
                g.goods_detail=detailinput
                g.goods_updatetime=nowtime
                g.save()
                
                #  图片路径转换
                lastinfo=Goods.objects.get(id=gd_id) 
                lastinfo.goods_firstphoto="/media/"+str(lastinfo.goods_firstphoto)
                lastinfo.save(update_fields=["goods_firstphoto"])
                # 删除原有的图片
                picdel=Goodspic.objects.filter(pic_goods_id=gd_id)
                picdel.delete()
                # 存入图片
                imgall=[]
                imgall.append(image2)
                imgall.append(image3)
                imgall.append(image4)
                imgall.append(image5)
                imgall.append(image6)
                for imgone in imgall:
                    if imgone:
                        Goodspic.objects.get_or_create(goods_pic=imgone,
                                                       pic_goods_id=gd_id
                                                       )
                        gdpicinfo=Goodspic.objects.filter(pic_goods_id=gd_id).last()
                        gdpicinfo.goods_pic="/media/"+str(gdpicinfo.goods_pic)
                        gdpicinfo.save(update_fields=["goods_pic"])
            
            
        
           
                redirecturl="/"+str(s_info.school_id)+"/goods-"+str(gd_id)
                return redirect(redirecturl)

        return render(request,"goodsupdate.html",{"gd_id":gd_id,
                                              "uname":uname,
                                              "schoolname":schoolname,
                                              "schooladress":schooladress,
                                              "school_id":s_info.school_id,
                                              "goodsinfo":goodsinfo,
                                              "goodsmethod":goodsinfo.goods_trademethod,
                                              "u_info":u_info,
                                              "playerschool":playerschool,
                                              "allpic":allpic,
                                              "piclen":piclen,
                                              "srcall":srcall,
                                              "initcount":initcount,
                                              "title_msg":title_msg,
                                              "img_msg":img_msg,
                                              "newprice_msg":newprice_msg,
                                              "oldprice_msg":oldprice_msg,
                                              "newpercent_msg":newpercent_msg,
                                              "trademodel_msg":trademodel_msg,
                                              "detailinput_msg":detailinput_msg
                                              })
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")
    
# 举报
def report(request,gd_id):
    uname=request.session.get("username","")
    scode=request.session.get("code","")
    uplayname=Player.objects.filter(player_username=uname)
    ubossname=Boss.objects.filter(bossname=uname)
    if uplayname:
        gdinfo=Goods.objects.get(id=gd_id)
        schoolinfo=School.objects.get(id=gdinfo.goods_school_id)
        playinfo=Player.objects.get(player_username=uname)
        report_msg=code_msg=""
        if request.method=="POST":
            safecode=request.POST.get("safecode")
            reportinfo=request.POST.get("report")
            reporttime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            if str(safecode).lower()!=str(scode).lower():
                code_msg="验证码错误!"
            elif reportinfo=="":
                report_msg="投诉内容不能为空!"
            else:
                try:
                    Report.objects.get_or_create(reportcontent=reportinfo,
                                        reportauth_id=playinfo.id,
                                        bereportgoods_id=gd_id,
                                        reporttime=reporttime
                                        )
                    report_msg="投诉成功!"
                    
                    redirecturl="/"+str(schoolinfo.school_id)+"/goods-"+str(gd_id)
                    return redirect(redirecturl)
                    
                    
                except IntegrityError:
                    report_msg="请勿重复投诉!"
                    
            
        return render(request,"report.html",{"gd_id":gd_id,
                                             "gdinfo":gdinfo,
                                             "uname":uname,
                                             "schoolinfo":schoolinfo,
                                             "report_msg":report_msg,
                                             "code_msg":code_msg
                                            })
    elif ubossname:
        return redirect("/boss/")
    else:
        return redirect("/login/")

################################################################

# 定时任务
def checksign():
    todaytime=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    playinfo=Player.objects.all()
    for playone in playinfo:
        signinfo=Signin.objects.filter(sign_player_id=playone.id).order_by("-signtime").first() #根据玩家id取签到记录倒序第一个
        if not signinfo:
            Signin.objects.get_or_create(
                                  signtime=todaytime,
                                  signstatus=-1,
                                  sign_jf=0,
                                  sign_player_id=playone.id,
                                  sign_date=todaytime
                                  )
            
        else:
            recentsigndate=signinfo.signtime.strftime("%Y-%m-%d")
            todaydate=datetime.datetime.now().strftime("%Y-%m-%d")
            if recentsigndate==todaydate:
                pass
            else:
                Signin.objects.get_or_create(
                                             signtime=todaytime,
                                             signstatus=-1,
                                             sign_jf=0,
                                             sign_player_id=playone.id,
                                             sign_date=todaydate
                                             ) 
        
        


# 定时器
sched=Scheduler()
sched.add_cron_job(checksign,day_of_week="0-6",hour="23",minute="59",second="59")
sched.start()


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值