版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youzi_yun/article/details/78356190
抽象模型基类的Python文件命名应为小写加下划线。
form表单获取的数据均为str格式,如果需要计算,记得转换格式。
表级操作用的是模型管理器对象,例如查询表;
行级操作用的是那一行数据对象,写在模型类中,比如更新数据(例如:self.get(user_id = XX)获取到的对象)。
- setting中配置MEDIA_ROOT放置前台用户上传图片的存储路径:
- 创建测试数据时,在test.py中,图片的路径仍然以static(静态文件根目录)计,可以写以MEDIA_ROOT为相对路径开始计,在html中要手动添加MEDIA_ROOT。
- 创建模型时,后台admin上传图片的存储路径,upload_to=”“以MEDIA_ROOT为相对路径开始计算”,但是数据库中存储的路径是不加MEDIA_ROOT的,记得修改model,加上MEDIA_ROOT路径,html渲染时,路径仍然以static计。
创建模型
创建抽象基类模型,记得在类内写
class Meta: abstract = True
在admain中给字段起名字
verbose_name
goods_name = models.CharField(max_length=20,verbose_name="商品名")
在admain中给模型类起名字
class Meta:
verbose_name = "菜品分类"
verbose_name_plural = "菜品分类"
所有后台获取到的数据,均要进行验证:
- 前台用户输入数据,格式,合法性验证;
- 从数据库获取数据,均需要try,根据情况写except。
csrf_token
{% csrf_token %}
在html页面生成input隐藏标签
<input type="hidden" name="csrfmiddlewaretoken" value="xxxxxxxxxxxxxxxxxxxxxxx">
{{ csrf_token }}
直接生成token的value xxxxxxxxxxxxxxxxxxxxxxxxxxxx
html页面想向后台,js传送数据,可以增加隐藏标签,通过name获取,如post请求的ajax,手动获取token的value,发送给后台。
视图中链接数据库操作时,用变量接收,不会执行查询,只有在模板中渲染时,用到才会执行查询,并缓存,不会每次都查。
goods = Goods.objects.all()