当前位置: 首页 > news >正文

开发实践11_Blog

以下学习 朔宁夫 基于pycharm的网站开发课程笔记。

富文本:

models: content = models.TextField(verbose_name="content")

        或者 content = RichTestUploadingField(default="", verbose_name="content")

setting:    installed_app: "ckeditor", "ckeditor_uploader",   #  富文本编辑器 富文本上传工具

                CKEDITOR_CONFIGS = { 'default': { 'toolbar': 'full', 'height': 300, 'width': 800 } }

                CKEDITOR_UPLOAD_PATH = os.path.join(BASE_DIR, 'static')

                STATIC_URL = '/static/'     

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

图片:

models: content = models.ImageField(upload_to='b_i', verbose_name='i') # 会找media路径、创建上传的文件

setting:  MEDIA_ROOT = os.path.join(BASE_DIR, 'static')

演示:

一个图文博客:

              

架构:

主页+详情页。模型:blog。视图类:展示目录+展示详情。

实现:

0 准备富文本工具,资源路径。

INSTALLED_APPS = ['ckeditor','ckeditor_uploader',
]CKEDITOR_CONFIGS = {'default': {'toolbar': 'full','height': 300,'width': 800}
}CKEDITOR_UPLOAD_PATH = os.path.join(BASE_DIR,'static')STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),
]MEDIA_ROOT = os.path.join(BASE_DIR, 'static')

1 创建模型。admin注册。后台添加测试数据。        

from django.db import modelsfrom ckeditor_uploader.fields import RichTextUploadingField
from ckeditor.fields import RichTextFieldclass Blog(models.Model):title = models.CharField(max_length=32, unique=False, verbose_name='title')abstract = RichTextUploadingField(max_length=64, verbose_name='abstract')content = RichTextField(default='', verbose_name='content')img = models.ImageField(upload_to='blog_img', verbose_name='img', blank=True)class Meta:db_table = 'Blogs'verbose_name = 'a blog_app'verbose_name_plural = 'blogs'def __str__(self):return f"{self.pk}__{self.title}"@classmethoddef get_one(cls, pk):try:return cls.objects.get(pk=int(pk))except cls.DoesNotExist:return None

2 视图类

from django.shortcuts import render
from django.views import Viewfrom blog_app.models import Blogclass BlogHome(View):def get(self, request):blogs = Blog.objects.all()return render(self.request, 'bloghome.html', locals())class BlogDetail(View):def get(self, request, blog_id):blog = Blog.get_one(pk=blog_id)return render(self.request, 'blogdetail.html', locals())

3 templates

 4 urls

相关文章:

  • 【Java数据结构】ArrayList和LinkedList的遍历
  • 数据结构-->线性表-->顺序表
  • Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件
  • 类与对象(终章)——友元,内部类,匿名对象
  • 【Unity3D小技巧】Unity3D中UI控制解决方案
  • 私有化部署一个吃豆人小游戏
  • powershell 接收一个端口tcp数据复制转发到多个目的
  • [linux c]linux do_div() 函数用法
  • 《数电》理论笔记-第1章-逻辑代数基础
  • 数据结构--基础知识
  • 2019年江苏省职教高考计算机技能考试——一道程序改错题的分析
  • Spring是怎么解决循环依赖的
  • U盘显示空间小于实际U盘空间的解决方案
  • chisel之scala 语法
  • pip安装tf-gpu=2.4的bug解决方案
  • 【347天】每日项目总结系列085(2018.01.18)
  • CODING 缺陷管理功能正式开始公测
  • cookie和session
  • hadoop集群管理系统搭建规划说明
  • java中的hashCode
  • Laravel 中的一个后期静态绑定
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • OSS Web直传 (文件图片)
  • Protobuf3语言指南
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • RxJS: 简单入门
  • Spring框架之我见(三)——IOC、AOP
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端面试总结(at, md)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 微信小程序实战练习(仿五洲到家微信版)
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Linux权限管理(week1_day5)--技术流ken
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (function(){})()的分步解析
  • (rabbitmq的高级特性)消息可靠性
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (六)Hibernate的二级缓存
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 受管制代码
  • .net与java建立WebService再互相调用
  • @html.ActionLink的几种参数格式
  • @ResponseBody
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [AIGC] MySQL存储引擎详解
  • [Angular] 笔记 18:Angular Router