Django相关文件配置

Django相关文件配置

settings.py 配置
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False

os.path.join(BASE_DIR, 'template')

STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'),
)
urls.py 配置
#  urls.py
from django.urls import path,include

urlpatterns = [
    path('',include('子应用名称.urls')),
]


# 子应用 urls.py
from django.urls import path
from 子应用名称 import views

urlpatterns = [
    path('',views.index),
]
models.py 配置
# 分类表
class Cate(models.Model):
    name = models.CharField(max_length=50,verbose_name='分类名称')

    def __str__(self):
        return self.name

# 电脑表
class Computer(models.Model):
    # on_delete=models.SET_NULL,null=True   外键关联可以为空
    cate = models.ForeignKey(Cate,verbose_name='所属分类',on_delete=models.CASCADE)
    
    name = models.CharField(max_length=50,verbose_name='电脑名称')
    img_path = models.CharField(max_length=100,verbose_name='电脑图片')
    price = models.DecimalField(max_digits=6,decimal_places=2,verbose_name='电脑价格')
    size = models.CharField(max_length=50,verbose_name='显示器尺寸')
    cpu = models.CharField(max_length=50,verbose_name='处理器规格')

    def __str__(self):
        return self.name
admin.py 配置
from 子应用名称.models import *

# Register your models here.
admin.site.register(表类名)
views.py 视图函数
# 上传图片
import os
from 主应用名称.settings import STATICFILES_DIRS

def add_computer(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        price = request.POST.get('price')
        cate_id = request.POST.get('cate_id')
        path = request.FILES.get('img_path')
        if not all([name,price,size,cpu,cate_id,path]):
            error = '输入框不能为空!'
            return render(request,'add_computer.html',locals())
        else:
            cate = Cate.objects.filter(id=cate_id).first()  # 获取电脑的分类数据
            file_path = name + '.' + path.name.split('.')[-1] # 取到后缀
            file = 'img/'  + file_path # 数据库存储的路径了

            with open(os.path.join(STATICFILES_DIRS[0],file),'wb') as fp:
                fp.write(path.read())

                Computer.objects.create(name=name,price=price,cate=cate,img_path=file)
                return redirect('/')

    cate = Cate.objects.all()
    return render(request,'add_computer.html',locals())

# add_computer.html
<form action="" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <label>电脑名称:</label><input type="text" name="name"><br><br>
    <label>价格:</label><input type="text" name="price"><br><br>

    <label>所属分类:</label>
    <select name="cate_id">
    {% for i in cate %}
    <option value="{{i.id}}">{{i.name}}</option>
    {% endfor %}
    </select><br><br>

    <label>电脑图片:</label><input type="file" name="img_path"><br><br>
    {{error}}
    <br>
    <input type="submit" value="添加">
</form>
# 分页
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger # 分页类

def index(request):
    computer = Computer.objects.all()  # 获取所有的电脑数据
    p = Paginator(computer,3)   # 对数据进行分类展示
    id = request.GET.get('id')
    try:
        computer = p.page(id)
    except EmptyPage: # 没有传ID,默认为第一页
        computer = p.page(1)
    except PageNotAnInteger:  # ID 为小数,默认为第一页
        computer = p.page(1)

    return render(request,'index.html',locals())

# index.html
    {% if computer.has_previous %}
    <a href='/?id={{ computer.previous_page_number }}'>上一页</a>
    {% else %}

    {% endif %}
    {% if computer.has_next %}
        <a href='/?id={{ computer.next_page_number }}'>下一页</a>
    {% else %}
        
    {% endif %}
# 展示分类页面,post 时进行 ajax 提交
from django.http import HttpResponse
def show_cate(request):
    cate = Cate.objects.all()
    if request.method == 'POST':
        id = request.POST.get('id')  # 获取到分类的 ID

        cate = Cate.objects.filter(id=id).first()   # 根据 ID 查找分类数据
        computer = Computer.objects.filter(cate=cate).all()   # 查找分类下的所有电脑信息

        from django.core import serializers   # 进行序列化返回页面
        computer = serializers.serialize('json',computer,ensure_ascii=False)
        return HttpResponse(computer)

    return render(request,'show_cate.html',locals())

# show_cate.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>分类展示页面</title>
    <script src="/static/js/jquery-1.10.2.min.js"></script>
    <script src="/static/js/jquery.cookie.js"></script>
</head>
<body>
    <a href="/">点击返回首页</a><br><br>
    <hr>
    {% for i in cate %}
    <button id="{{i.id}}">{{i.name}}</button>&nbsp;&nbsp;&nbsp;&nbsp;
    {% endfor %}
    <br><br>
    <div id="content"></div>
</body>

<script>
    $(document).ready(function(){
        $('button').click(function(){
            var id = this.id
            //console.log(id)
            
            $.ajax({
                url:'/show_cate/',
                type:'post',
                data:{
                    'csrfmiddlewaretoken': $.cookie('csrftoken'),
                    id:id
                },
                success:function(res){
                    var res = JSON.parse(res)
                    //console.log(res)
                    var html = ''
                    for (var i=0;i<res.length;i++){
                        html += "<li>"+res[i]['fields']['name']+"</li><br>"
                    }
                    $('#content').html(html)
                }
            })
        })
    })
</script>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值