33、Django实战第33天:我的消息
1、编辑usercenter-message.html继承usercenter-base.html

2、编辑users.views.py
...
from operation.models import UserMessage class MyMessageView(LoginRequiredMixin, View):
def get(self, request):
messages = UserMessage.objects.filter(user=request.user.id)
return render(request, 'usercenter-message.html', {
'messages': messages,
})
3、编辑users.urls.py
...
from .views import MyFavOrgView, MyFavTeacherView, MyFavCourseView, MyMessageView urlpatterns = [
...
url(r'my_message/$', MyMessageView.as_view(), name='my_message'),
]
4、前端数据动态展示,编辑usercenter-message.html

5、修改usercenter-base.html导航链接

到此,可以在xadmin后台给用户添加消息。前端就能展示出来了...
消息分页
编辑users.view.spy
...
from pure_pagination import Paginator, PageNotAnInteger class MyMessageView(LoginRequiredMixin, View):
def get(self, request):
messages = UserMessage.objects.filter(user=request.user.id) # 分页
try:
page = request.GET.get('page', 1)
except PageNotAnInteger:
page = 1
p = Paginator(messages, 5, request=request)
my_messages = p.page(page) return render(request, 'usercenter-message.html', {
'messages': my_messages,
})
编辑usercenter-message.html


导航栏样式

思路:每个页面传递一个参数到前端,前端根据参数值判断样式。
顶部显示未读消息数

我们可以在userprofile表里面定义方法来获取未读消息数
class UserProfile(AbstractUser):
nick_name = models.CharField(max_length=50, verbose_name='昵称', default='')
birthday = models.DateField(verbose_name='生日', null=True, blank=True)
gender = models.CharField(max_length=6, choices=(('male', '男'), ('female', '女')), default='female')
address = models.CharField(max_length=100, default='')
mobile = models.CharField(max_length=11, null=True, blank=True)
image = models.ImageField(upload_to='image/%Y/%m', default='image/default.png', max_length=100) class Meta:
verbose_name = '用户信息'
verbose_name_plural = verbose_name def get_message_nums(self):
from operation.models import UserMessage
return UserMessage.objects.filter(user=self.id, has_read=False).count() def __str__(self):
return self.username
编辑usercenter-base.html, 并且把这段代码复制到base.html和org_base.html

当我们点击喇叭图标进入消息页面,则所有消息变为已读,编辑users.views.py

当新用户注册后,会系统发送的欢迎信息,编辑注册的view
class RegisterView(View):
def get(self, request):
Register_form = RegisterForm()
return render(request, 'register.html', {'register_form': Register_form}) def post(self, request):
Register_form = RegisterForm(request.POST)
if Register_form.is_valid():
user_name = request.POST.get('email', '')
pass_word = request.POST.get('password', '')
user_profile = UserProfile()
if not UserProfile.objects.filter(email=user_name):
user_profile.email = user_name
user_profile.username = user_name
user_profile.password = make_password(pass_word)
user_profile.is_active = False
user_profile.save() # 欢迎消息
user_message = UserMessage()
user_message.user = user_profile.id
user_message.message = '您好:{},欢迎注册慕学网,祝您学习愉快'.format(user_profile.username)
user_message.save() sendEmail(user_name, 'register')
return render(request, 'login.html')
else:
return render(request, 'register.html', {'register_form':Register_form, 'msg':'该邮箱已被注册'})
else:
return render(request, 'register.html', {'register_form': Register_form})
33、Django实战第33天:我的消息的更多相关文章
- The authenticity of host '172.16.33.53 (172.16.33.53)' can't be established的问题(日志六)
用ssh登录一个机器(换过ip地址)会出现如下错误 weiguohui@weiguohui1-virtual-machine:~/.ssh$ ssh 172.16.33.53The authentic ...
- 从零开始部署Django生产环境(适用:《跟老齐学Python Django实战》)
<跟老齐学Python Django实战>作为市面上少有的Django通俗实战书籍,给了我学习Django很大的帮助.作为一名新入门的菜鸟,全书我重复练习了至少三遍,每次都有新的收获. 前 ...
- 33.Django ModelForm
ModelForm 1.ModeForm简单验证 from django.db import models # Create your models here. class UserInfo(mode ...
- Django教程:[33]从数据库生成模型
在使用django做网站的时候,有时候我们的数据库来自一个已有的数据库,如何整合这个数据库呢? django提供了方便的方法来整合已有数据库,下面我们看看具体的方法: 1.先来设置数据库:在网站文件夹 ...
- 33、Flask实战第33天:sweetalert提示框
这节我们继续优化,接收到返回值,我们在前端做一些处理,如:密码修改成功,弹出一个成功的提示框.这个提示框我们采用sweetalert 其中xtalert.js是对上面两个文件的一个封装,使得我们用sw ...
- 前端每日实战:33# 视频演示如何用纯 CSS 创作牛奶文字变换效果
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/MGNWOm 可交互视频教程 此视频 ...
- Django笔记&教程 3-3 模板常用语法
Django 自学笔记兼学习教程第3章第3节--模板常用语法 点击查看教程总目录 本文主要参考:https://docs.djangoproject.com/en/2.2/ref/templates/ ...
- Flutter移动电商实战 --(33)列表页_子类和商品列表交互效果
主要实现点击小类下面的列表跟着切换 获取右侧下面的列表信息,即要传递大类的id也要传递小类的,所以需要把左侧的大类的id也要Provide化 可以看下网站上的接口说明: https://jspang. ...
- 区块链入门到实战(33)之Solidity – 数据类型
在用任何语言编写程序时,都需要使用变量来存储各种信息.变量是内存空间的名称,变量有不同类型,例如整型.字符串类型等等.操作系统根据变量的数据类型分配内存. Solidity中,变量类型有以下几大类: ...
随机推荐
- mysql5.7 MRG集群部署学习
文章目录 1.安装mysql 2.修改配置文件: 3.安装group_replicatin插件,启动group_replication 4.添加节点node-02 node-03: 有关复制组的相关原 ...
- BZOJ2120 数颜色 【带修改莫队】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 6579 Solved: 2625 [Submit][Status][Discus ...
- [bzoj 2818]欧拉函数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 枚举最大公约数,对于每一个质数p,只需要求出1<=x,y<=(n/p)范 ...
- 如何用listview显示服务端数据
https://www.cnblogs.com/caobotao/p/5061627.html
- bzoj 4237 稻草人 CDQ
稻草人 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1433 Solved: 626[Submit][Status][Discuss] Descr ...
- fscanf函数的应用
转摘自:http://blog.csdn.net/mxgsgtc/article/details/13005675 以前老是被从文本里读取文件,然后逐个的进行字符解析,感觉非常的慢,自从知道了fsca ...
- windows下maven打包eclipse工程
打包过程中,可能出现的2个问题: ①.[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build ...
- windows10-seaslog安装笔记
1.seasLog在windows下的安装 首先,要下载seasLog的dll文件,下载地址:http://pecl.php.net/package/SeasLog 选择对应你的系统和php版本的d ...
- MyBatis对象关联关系----多对多的保存与查询
模拟情景: 对象:学生,课程 关系:一个学生可选多个课程,一门课程可被多个学生选择 一.保存 1.创建数据库表,student,course,student_course,其中student_cour ...
- 转:通过Spring Session实现新一代的Session管理
长期以来,session管理就是企业级Java中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新. 但是,现代的趋势是微服务以及可水平扩展的原生云应 ...