设计评论的数据库模型 用户评论的数据必须被存储到数据库里,以便其他用户访问时 Django 能从数据库取回这些数据然后展示给访问的用户,因此我们需要为评论设计数据库模型,这和设计文章、分类、标签的数据库模型是一样的...auto_now_add 的作用是,当评论数据保存到数据库时,自动把 created_time 的值指定为当前时间。...created_time 记录用户发表评论的时间,我们肯定不希望用户在发表评论时还得自己手动填写评论发表时间,这个时间应该自动生成。 创建了数据库模型就要迁移数据库,迁移数据库的命令也在前面讲过。...表单是用来收集并向服务器提交用户输入的数据的。考虑用户在我们博客网站上发表评论的过程。...当用户想要发表评论时,他找到我们给他展示的一个评论表单(我们已经看到在文章详情页的底部就有一个评论表单,你将看到表单呈现给我们的样子),然后根据表单的要求填写相应的数据。
name = 'comments' verbose_name = '评论' 设计评论的数据库模型 用户评论的数据必须被存储到数据库里,以便其他用户访问时 django 能从数据库取回这些数据然后展示给访问的用户...表单是用来收集并向服务器提交用户输入的数据的。考虑用户在我们博客网站上发表评论的过程。...当用户想要发表评论时,他找到我们给他展示的一个评论表单(我们已经看到在文章详情页的底部就有一个评论表单,你将看到表单呈现给我们的样子),然后根据表单的要求填写相应的数据。...,首先尝试输入非法格式的数据,例如将邮箱输入为 xxx@xxx,那么评论视图在校验表单数据合法性时,发现邮箱格式不符,就会渲染 preview 页面,展示表单中的错误,将邮箱修改为正确的格式后,再次点击发表...Comment 和Post 是通过 ForeignKey 关联的,回顾一下我们当初获取某个分类 cate 下的全部文章时的代码:Post.objects.filter(category=cate)。
; 用户可以查看所有人写的博客,同时可以评论博客,博客的展示与评论的展示都使用了 分页 的功能; 用户查看博客的次数记录为 浏览量 ,用户的浏览数目记录为 评论数,根据这两项系统 自动推荐 热度比较高的文章...3.2 数据库设计 主要涉及四个实体: 文章:用户:评论:分类 他们之间的 关系 如下: 一个文章对应一个分类,而一个分类可以有多篇文章,所以他们之间的关系是多对一的; 一个用户可以发布多篇文章,同时可以发表多个评论...,而每一个评论只对应于一个用户,每一篇文章只属于一个用户,所以用户与文章、评论之间是一对多的; 有了实体和关系,下面用 ER 图表示一下: ?...因为我们集成了 Django 自带的一个实体类 AbstractUser ,这个是实体类为我们提供了用户名、姓名、邮箱地址等通用信息,所以我们就不用单独指定了。...# 评论的文章 article = models.ForeignKey(Article, on_delete=models.SET_NULL, null=True) # 发表评论的用户
.设计评论的数据库模型 用户评论的数据必须被存储到数据库里,以便其他用户访问时 Django 能从数据库取回这些数据然后展示给访问的用户,因此我们需要为评论设计数据库模型,这和设计文章、分类、标签的数据库模型是一样的...(个人网站),用户发表的内容将存放在 text 字段里,created_time 记录评论时间。...auto_now_add 的作用是,当评论数据保存到数据库时,自动把 created_time 的值指定为当前时间。...created_time 记录用户发表评论的时间,我们肯定不希望用户在发表评论时还得自己手动填写评论发表时间,这个时间应该自动生成。...Comment 和Post 是通过 ForeignKey 关联的,回顾一下我们当初获取某个分类 cate 下的全部文章时的代码:Post.objects.filter(category=cate)。
; 2、用户的课程评论信息记录; 3、用户用于收藏公开课, 授课讲师, 授课机构以及用户消息提醒的记录; 4、用户个人中心里面我的课程说明,用户和课程之间的学习信息记录; 5、用户咨询消息的记录等。...class CourseComments(models.Model): # 前面知道一个用户发表多个课程评论,所以在课程评论表中将用户设置为外键。...# 此处的user其实就是一个用来告诉我们这个课程评论属于哪个用户的字段 user = models.ForeignKey(UserProfile, on_delete=models.CASCADE..., verbose_name="用户名") # 前面知道一门课程具有多个课程评论,所以在课程评论表中将课程设置为外键。..., verbose_name='用户名') # 前面知道一门课程可以有多个课程的信息,所以在用户课程表中将课程设置为外键。
'''扩写auth_user表需要使用AbstractUser''' # 用户表 class UserInfo(AbstractUser): phone = models.CharField...) article = models.ForeignKey(to='Article', on_delete=models.CASCADE) # 实质存的时候,是0和1 is_up...models.CharField(max_length=256) create_time = models.DateTimeField(auto_now_add=True) # 存父评论的...(forms.Form): # 名称校验 username = forms.CharField( max_length=18, min_length=3,label='用户名...#} {# 提交,使用form表单,类型要写成button,如果是submit的话会触发表单提交
之前就有人一直催我把博客的 Django 升级到 Django 2.0 以上,但是我一直懒得升级,因为我早就看过 Django 2.x 版本和 1.11.x 版本,其实没有太多的不同,所以没有找到需要升级的必要...因为这个库是支持 Python3 的,而且是官方推荐的库,可以避免出现问题。..., verbose_name='作者', on_delete=models.PROTECT) # 当删除有文章的作者时引发错误 category = models.ForeignKey(Category...=models.SET_NULL) # 当工具分类删除后把分类设置为空 # class Comment(models.Model): # 删除评论人或者父评论的时候同时删除评论 author = models.ForeignKey...) parent = models.ForeignKey('self', verbose_name='父评论', related_name='%(class)s_child_comments', blank
Django中的一对多是在一中进行设置,这里对应于文章的分类,ForeignKey即数据库中的外键。...models.DateTimeField('评论发表时间', auto_now_add=True) article = models.ForeignKey('Article', verbose_name...,直接制定model就行了,get_context_data可以添加一些额外的字段,比如以后我们要在首页的侧边栏显示目录和标签,所以这里要添加一个category_list和tag_list。...方法保存评论,设置commit=False则先不保存到数据库, # 而是返回生成的comment实例,直到真正调用save方法时才保存到数据库。...增加基本的用户认证功能。 零碎知识点 null和blank的区别 null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空。
简介 学完 Django2.x 可以搭建一个个人博客练练手 教程 创建项目 通过 pycharm 创建博客项目与虚拟环境 修改相关设置 允许任何域名 在开发和测试的时候可以将这里填为 *,后期部署上线后修改为指定域名即可...= [ { # 选择我们的模板引擎,刚刚用pycharm创建时已选择django自带的模板引擎 'BACKEND': 'django.template.backends.django.DjangoTemplates...@163.com Password: Password (again): 密码跟 用户名 太相似了。...Django 安装成功, 访问 Django-admin 界面, 在浏览器中输入 127.0.0.1:8000/admin,看到 Django 管理,需要输入用户名密码,输入用户名密码后可以跳转到 Django...字段 类型 备注 id PrimaryKey 主键 name CharField 用户名 password CharField 密码 评论表 字段
media指代的路径与upload_to的拼接:BASE_DIR+blog+media+uploads+avatar/a.png avatar字段在数据库中保存的是:avatar/a.png 用处二...import models # 登陆Form class LoginForm(forms.Form): username = forms.CharField( label="用户名...", "min_length": "用户名最短为3位", "max_length": "用户名最长12位", }, widget...", "min_length": "用户名最短3位", "max_length": "用户名最长12位", }, widget..., "min_length": "用户名最短3位", "max_length": "用户名最长12位" }, widget
之后按照提示输入用户名及密码即可。...输入刚刚创建的超级用户的用户名和密码,点击login按钮,即来到如下的管理界面: ? 通过这个管理界面,可以方便的对用户组和用户进行管理,并且有详细的日志记录。...到目前为止,一个可以验证用户权限并且可管理用户组和用户的后台管理系统就可以完美的运行了,简直太方便了。好了,下面开始添加与本系统相关的数据模型。...数据模型设计: 由于这只是一个简单的博客,并且功能有限,所以,数据模型也是比较简单的,仅包括文章表、分类表及评论表这三个表,至于用户验证的部分,使用django自带的用户表。...接下来,启动网站,访问http://127.0.0.1:1989/admin/ 输入用户名和密码,进入管理页面,咦,什么情况,说好的安装什么app就会出现对应的管理功能呢,怎么依然只有Auth这个app
前言 从上一节我们知道home应用需要涉及文章,分类和标签三个部分,其实这就是个人博客系统最核心的功能:发表文章。下面我们分析一下数据库该如何设计?...3.文章的存储是相对复杂的,从项目分析的图1.4可以看到,文章数据表需要存储文章的标题,内容,创建时间,修改时间,摘要,分类,标签,作者,浏览量和评论数,要存储的数据有几个需要注意:分类,标签和评论数。...首先在设计数据表时不考虑评论数,因为评论我们已经作为一个独立的应用,而且这和评论数据表与文章数据表的关系有关联,之后在讲评论功能时会说明。...author表示文章作者,大家会发现我们使用了外键,这是因为User是Django内置的数据模型,从django.contrib.auth.models中导入的,专门用来负责用户信息的处理,本质上User...'USER':'root',#用户名 'PASSWORD':'',#密码为空 'HOST':'127.0.0.1',#主机 'PORT':'3308'#端口 } } 大家根据自己的
我们把写好的文章永久地保存在数据库里,当用户访问我们的博客时,Django 就去数据库里把这些数据取出来展现给用户。 博客的文章应该含有标题、正文、作者、发表时间等数据。...数据库存储的数据其实就是表格的形式,例如存储博客文章的数据库表长这个样子: 文章 id 标题 正文 发表时间 分类 标签 1 title 1 text 1 2016-12-23 Django Django...# django.contrib.auth 是 Django 内置的应用,专门用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。...理解多对一和多对多两种关联关系 我们分别使用了两种关联数据库表的形式:ForeignKey 和 ManyToManyField。 ForeignKey ForeignKey 表明一种一对多的关联关系。...假如你对多对一关系和多对多关系还存在一些困惑,强烈建议阅读官方文档对这两种关系的说明以及更多官方的例子以加深理解: Django ForeignKey 简介 Django ForeignKey 详细示例
创建admin用户并登陆 基本步骤 ? 浏览器地址栏输入:http://127.0.0.1:8000/admin ? 进行登陆。...之后按照下面链接进行app中数据库表的更新 python3 django整理(六)配置数据库(mysql) 上面的输入刚才新建的用户名和密码 ? 完整过程 完整详细过程如下: ?...,django所需要的 在mysql新增数据库如下 ?...参考文献:文献1 Django引入外部数据库 Django引入外部数据库还是比较方便的,步骤如下 : 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类...,和创建新项目的时候一致 运行下面代码可以自动生成models模型文件 Python manage.py inspectdb 这样就可以在控制台的命令行中看到数据库的模型文件了 把模型文件导入到
to_主表名_id 5.当我们通过 from_主表名_id 相关联的对象查与 to_主表名_id相关联的对象时,可以直接通过 '主表对象.关系表(从表)' 查询 # views.py中 # 查询和jojo...3,4); ''' 6.当我们 通过 to_主表名_id相关联的对象查 from_主表名_id 相关联的对象时,则需要通过 '主表对象.关系表_set' 进行查询 # views.py中 # 查询和...1,2); ''' 二、auth模块 1.auth的简单使用 1.执行数据库迁移的那两条命令时,即使我们没有建表,django是不是也会创建好多张表?...myuser = auth.authenticate(request,username=name,password=psw) # 如果auth_user表中有这条记录,则返回一个user对象(一般就是用户名...auth.login(request,myuser) # 会产生一个user对象,可以在任何视图函数中调用 """ 给当前成功登陆的用户保存登陆状态
-有同学分析,要再建一张表,跟commit是一对多的关系(不好) -如何用这一个表,表示出根评论和子评论?...当填写完用户名的时候,鼠标移动到下一个框的时候,用户名的框就失去焦点了,那么在失去焦点的时候,瞬间显示出,这个字段的校验错误信息。 \d+)', views.user_blog), ## 路由三合一(分类,标签,随笔) # 分组分出三个,(用户名,category|tag|archive中的一个,可能是分类...路由三合一(分类,标签,随笔) # 分组分出三个,(用户名,category|tag|archive中的一个,可能是分类id tagid或者时间) url(r'^(?...P\d+)', views.update_article), ## 路由三合一(分类,标签,随笔) # 分组分出三个,(用户名,category|tag|archive中的一个
热门课程推荐,课程的分页。 点击课程–> 课程详情页中对课程进行收藏,取消收藏。富文本展示课程内容。 点击开始学习–> 课程的章节信息,课程的评论信息。课程资源的下载链接。...点击讲师的详情页面–> 对讲师进行收藏和分享,以及讲师的全部课程。 导航栏: 授课机构有分页,排序筛选功能。 机构列表页右侧有快速提交我要学习的表单。...1.2.创建工程 创建工程 django-admin startproject MxOnline 然后开始项目的开发 二、models设计 项目的开发都是从models设计开始,后台的管理和前端的渲染无非就是对数据库的增删改查...username 用户名字段不要随便改动, email 邮箱, is_staff 表示是否是员工(后台管理会用到)。 is_active 用户是否是激活状态, date_joined 注册时间。...用户评论 UserCourse 用户学习的课程 UserFavorite 用户收藏 (1)UserAsk 代码如下: class UserAsk(models.Model): name = models.CharField
verbose_name='用户表' #去掉 用户表 后的s verbose_name_plural = verbose_name class Blog...blog = models.ForeignKey(to='Blog', to_field='nid', null=True) # 一对多的关系 category = models.ForeignKey...): #谁对那篇文章评论了什么内容 nid = models.AutoField(primary_key=True) user = models.ForeignKey(to='UserInfo...', to_field='nid') article = models.ForeignKey(to='Article', to_field='nid') #布尔类型,本质也还是0和1...=18,min_length=3,label="用户名", error_messages={'max_length':'太长了',
/django/topics/db/aggregation.html#yiyi-133(聚合) 使用提供的 查询表达式 Annotate 查询集中的每个对象。...查询表达式可以是一个简单的值、模型(或关联模型)字段的一个引用或对查询集中的对象一个聚合函数(平均值、和等)。...': 'django admin 实现 增加记录 和 修改记录 展现不同的表单', 'likes': 8}, {'article_id': 150, 'article__title': 'windows...(User, related_name="like_user_set", verbose_name="点赞用户", blank=True, null=True,...default=True, verbose_name="显示文章") is_comment = models.BooleanField(default=True, verbose_name="显示临时评论
领取专属 10元无门槛券
手把手带您无忧上云