Django 搭建时候需要的基本配置

 

项目settings.py中
 

#DeBug = False 是生产环境,一般情况都使用这种环境 如果为true那么就会把出错的代码显示
DEBUG = False
# DeBug如果为False还需要
# python manage.py collectstatic 将admin的所有js css文件拷贝到一个static文件夹中,不然登录admin时候就没有样式和功能
# 同时建立一个static文件夹用来存放我们的js css文件以及admin自带的css js文件

#指定静态文件的存储路径并创建static文件夹
#使用python manage.py collectstatic 将admin的前端文件导入到static中这样admin后端管理系统就可以使用了
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 设置session  在cookie中保存的sessionid 时间
SESSION_COOKIE_AGE = 60*60*24
# 设置关闭浏览器就删除session
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
#指定任何位置的地址都能访问
ALLOWED_HOSTS = ["*"]
#自己定义的app需要在这里注册
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'maing'
]
#用中文显示
LANGUAGE_CODE = 'zh-hans'
#用中国时间
TIME_ZONE = 'Asia/Shanghai'

当然如果使用Debug = True的时候:

仅需要在settings.py 中添加

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

在项目主url.py中配置

#Debug=False 后python manage.py collectstatic后需要手动指定路径
re_path(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),
#指定admin后台管理的静态访问路径
re_path(r'^main/', include('maing.urls')),

需要导入的模块

from django.conf import settings
from django.contrib import admin
from django.urls import path, re_path, include
from django.views.static import serve

 

配置单独app项目时需要注意的:

首先要python manage.py startapp xxxx        # xxxx自定义名字

在该app的modules.py中

以Goods为例

由于图片在添加后,如果再次添加则不会删除原图,所以用到了Django信号来处理该事件

class Goods(models.Model):
    #商品
    #商品名称
    name = models.CharField(max_length=50, verbose_name="商品名称")
    #所属类别
    belong = models.ForeignKey(GoodsType, verbose_name="商品类型", on_delete=models.CASCADE)
    #数量
    num = models.IntegerField(verbose_name="数量")
    #价格 共七位 二位小数
    price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name="价格")
    #商品图片 null=Ture 即使不传图片,也不用上传新图
    picture = models.ImageField(verbose_name="商品图片", upload_to="static/upload/goods", null=True)
    #描述
    decs = models.TextField(verbose_name="简述")

    class Meta:
        verbose_name = "商品"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


#该商品删除则在删除动作之前删除对应图片
@receiver(post_delete, sender=Goods)
def delete_upload_files(sender, instance, **kwargs):
    # 在后台管理 删除该使用者时候,对应的文件也删除
    delphoto = getattr(instance, 'picture', '')
    photopath = os.path.join(settings.MEDIA_ROOT, str(delphoto))
    if os.path.exists(photopath):
        os.remove(photopath)


@receiver(pre_save, sender=Goods)
def img_to_change(sender, instance, **kwargs):
    # 点击保存前进行该业务处理
    # 后台管理的img图片原来路径的获取
    classify_s = Goods.objects.filter(id=instance.id)
    #先判断,如果可以得到图片说明是修改图片业务,否则就是保存业务
    if classify_s:
        oldimgpath = str(classify_s[0].picture)
        newimgpath = str(instance.picture)
        # 比对两个路径所对应图片是否一致
        # 如果不一致那么就把旧路径的图片删除
        if newimgpath != oldimgpath:
            os.remove(os.path.join(settings.MEDIA_ROOT, str(oldimgpath)))

 

在admin.py中配置

 

admin.site.site_header = "蓝庆库存管理"# 这样就能指定管理名字是什么 而不是默认的Django管理了

创建的app中的url一般这样写

re_path  第二个参数是我们views中的定义的def method

urlpatterns += [
    #刷主页面的商品和商品类型
    re_path(r"^goodsandtypes/", goodstype),
    re_path(r"getmainpagemax/", getmainpagemax),
    re_path(r"moregoods/", moregoods),
    re_path(r"othergoods/", othergoods),
]

 

一些其他的功能

"""
用来自定义我们的Decimal转Json的类
由于Decimal在转json时候会有异常所以需要改类存在,这样在json.dumps()时候就能正常转换
"""
class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        super(DecimalEncoder, self).default(o)

调用时候在视图中

dic 是我们自己封装的数据可以是列表可以是字典

json.dumps(dic, cls=DecimalEncoder)

 

# 每一个goods 由于和goodstype发生外键关系,所以goodstype必须通过get然后利用goods_set方法得到对应的唯一外键的goods
mtype = GoodsType.objects.get(name=types)
# 根据id查询到所有goods
mygoods = mtype.goods_set.get_queryset().order_by("price")

按照 price 排序 找到 name price picture 字段 

goodsobj = gtobj.goods_set.values("name", "price", "picture").order_by("price")
gtobj.goods_set.values_list()  可以直接得到列表形式

 

 

手动添加一个csrftoken
from django.middleware.csrf import get_token, rotate_token

def display(request):
    # 返回主页面
    # 手动添加一个csrftoken 否则post请求就会是403
    get_token(request)       # 两者选一
    mycookies = request.COOKIES
    print("我的cookie是", mycookies)
    # rotate_token(request)  # 此方法每次设置新的cookies
    return render(request, "display.html")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值