退出登陆功能

1.配置url
2.调用logout函数进行登出信息
3.调用HttpResponseRedirect函数进行重定向

配置url,配置用户登陆路径

url(r'^loginout/$', logout_view, name='user_loginout'),

LogoutView,从模板中获取来时路径next参数,并在登出后重定向至来时路径

def logout_view(request):if request.method == 'GET':next_page = request.GET.get('next', '/')logout(request)return HttpResponseRedirect(next_page)  # 转到来时页面#return render(request, 'index.html', {})  # 登陆成功,由后台渲染跳转至index,并在index中判断,头部显示

在模板中埋点,获取当前路径,并以get方式传回给后台

<a class="fr" href="{% url 'user_loginout' %}?next={{ request.path }}">退出</a>

点击数记录

点击数,收藏数,未读消息

1.每次调用视图逻辑,即点击数+1
2.开始学习即课程学生人数+1
3.在每个视图函数中埋点,只要调用了该视图函数即为相应的数据点击数实现+1操作
4.课程、教师、机构收藏数

添加点击数,在视图逻辑的get函数中增加ClickNumber的递增操作

#教师点击量操作
class TeacherDetailView(View):def get(self,request,teacher_id):#教师信息teacher = Teacher.objects.get(id=teacher_id)#教师的课程courses = teacher.course_set.all()[:3]  #course内有teacher这个外键,利用_set获取与该teacher相关的所有课程#教师排行榜all_teacher = Teacher.objects.all()#收藏状态teacher_fav = False#该页面每点击一次,点击量+1teacher.ClickNumber+=1teacher.save()organization_fav = Falseif  request.user.is_authenticated():    #先判断是否登陆if UserFavorite.objects.filter(User=request.user.id,FavoriteID=teacher.id,FavoriteType=3):teacher_fav = Trueif UserFavorite.objects.filter(User=request.user.id, FavoriteID=teacher.id, FavoriteType=2):organization_fav = Truereturn render(request, 'teacher_detail.html', {'teacher':teacher,'courses':courses,'all_teacher':all_teacher,'teacher_fav':teacher_fav,'organization_fav':organization_fav})#机构点击量操作
class OrganiztionDetailView(View):"""机构首页"""def get(self,request,org_id):organization = CourseOrganization.objects.get(id=int(org_id))#teacher = Teacher.objects.filter(BelongOrganization_id=int(org_id))teacher = organization.teacher_set.all()[:1]    #根据model的名字和外键的关联,反向取值#course = Course.objects.filter(Organization_id=int(org_id))course = organization.course_set.all()[:3]     #根据model的名字和外键的关联,反向取值#该页面每点击一次,点击量+1organization.ClickNumber+=1organization.save()###########是否已收藏#############has_fav = False #默认未收藏#先判断登录if  request.user.is_authenticated():if UserFavorite.objects.filter(User=request.user.id,FavoriteID=organization.id,FavoriteType=2):has_fav = Truereturn render(request, 'organization_home.html', {'organization':organization, 'teacher':teacher, 'course':course,'has_fav':has_fav})

收藏量同理

未读消息的配置,刚添加的消息所有has_read为False,进入我的消息后则将所有消息的has_read置为True,即可实现

首页设置

1.首页变成动态页面
2.课程加上广告位标志位
3.增加轮播图文件信息
4.利用forloop函数,获取循环的次数
5.模板汇总利用{{forloop|add:2}}进行加法处理

配置url

url(r'^$',IndexView.as_view(),name='index'),

配置视图逻辑,获取轮播图、课程轮播图,其他课程及机构的信息并传入模板中

class IndexView(View):def get(self,request):banners = Banner.objects.all()courses_banner = Course.objects.filter(Display=True)courses = Course.objects.filter(Display=False)[:6]organization = CourseOrganization.objects.all()[:20]return render(request, 'index.html', {'banners':banners,'courses_banner':courses_banner,'courses':courses,'organization':organization})

模板数据绑定

首页轮播图数据绑定

{% for banner in banners %}<li><a href="{{ banner.url }}"><img width="1200" height="478" src="{{ MEDIA_URL }}{{ banner.img }}" /></a></li>
{% endfor %}

课程轮播图数据绑定

{% for banner in courses_banner %}<li><a href="{% url 'courses:course_detail' banner.id %}"><img width="470" height="300" src="{{ MEDIA_URL }}{{ banner.CoursePicture }}" /></a></li>
{% endfor %}

其他课程展示数据绑定

{% for course in courses %}<div class="module1_{{ forloop.counter|add:2 }} box"><a href="{% url 'courses:course_detail' course.id %}"><img width="233" height="190" src="{{ MEDIA_URL }}{{ course.CoursePicture }}"/></a><div class="des"><a href="{% url 'courses:course_detail' course.id %}"><h2 title="{{ course.CourseName }}">{{ course.CourseName }}</h2></a><span class="fl">难度:<i class="key">{{ course.degree }}</i></span><span class="fr">学习人数:{{ course.Students }}</span></div><div class="bottom"><span class="fl" title="慕课网">{{ course.Organization }}</span><span class="star fr">{{ course.FavouriteNumber }}</span></div></div>
{% endfor %}

首页机构数据绑定,在模板中利用{% if forloop.counter|divisibleby:5 %}判断是否能被5整除

{% for org in organization %}<li class="{% if forloop.counter|divisibleby:5 %}five{% endif %}"><a href="{% url 'organization:organization_home' org.id %}"><div class="company"><img width="184" height="100" src="{{ MEDIA_URL }}{{ org.OrganizationImage }}"/><div class="score"><div class="circle"><h2>全国知名</h2></div></div></div><p><span class="key" title="{{ org.Organization }}">{{ org.Organization }}</span></p></a></li>
{% endfor %}

错误页面配置

404/500等页面配置

1、在templates中添加404.html
2、修改settings.py
3、修改views.py
4、修改urls.py

1、在templates中添加404.html

在templates目录里,添加一个404.html文件,我们自定义的404错误页面就写在这个文件里。

2、修改settings.py

settings.py

DEBUG =True 改为 DEBUG =False
ALLOWED_HOSTS = [] 改为 ALLOWED_HOSTS = [‘*’]。网上有资料说在可以改为[‘www.example.com’, ‘localhost’, ‘127.0.0.1’],但是在我这里会抛出bad request 400的错误。
修改TEMPLATES 里面的 DIRS
TEMPLATES = [

‘DIRS’ = [os.path.join(BASE_DIR, ‘templates’)],

]

3、修改views.py

#404页面
def page_not_found(request):return render(request, '404.html')#500页面
def page_error(request):return render(request, '500.html')#403页面
def permission_denied(request):return render(request, '403.html')

4、修改urls.py

在urls.py添加错误页面的显示视图

handler403 = permission_denied
handler404 = page_not_found
handler500 = page_error

DEBUG=false不能看到调试信息,部署的时候要这样设置
默认404可以在urls.py文件里加一行(不要加在urlpatterns里面,加在外面随便什么地方):
handler404 = ‘your_handler’
然后实现这个handler就行了

ALLOWED_HOSTS的说明

Django网站建设-点击/收藏量、未读消息,错误页面显示404,500相关推荐

  1. android 未读信息反复提醒,Android仿微信未读消息数提示显示数字BadgeView大于99条显示99+...

    [实例简介] Android仿微信未读消息数提示显示数字BadgeView大于99条显示99+ [实例截图] [核心代码] BadgeView └── BadgeView ├── app │   ├─ ...

  2. Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/51082574 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  3. Android app图标显示未读消息数

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/51082574 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  4. Android 桌面图标右上角显示未读消息数字

    背景: 在Android原生系统中,众所周知不支持桌面图标显示未读消息提醒的数字,虽然第三方控件BadgeView可以实现应用内的数字提醒.但对于系统的图标,特别是app的logo图标很难实现数字标志 ...

  5. Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒

    在Android手机上,如QQ.微信当有未读消息的时候.我们可以看到在应用的启动图标的右上角会有一个红色圈圈.且圈圈里会动态显示未读消息的数目,如下图显示: 那么该功能是怎么实现的呢? 在万能的互联网 ...

  6. 史上最全——手把手开发Django网站建设

    手把手开发Django网站建设 1.基础知识 1.1 HTTP协议 1.2 HTTP协议对应的操作 1.3 Web服务器 2.Django框架基础 2.1 Django的理解 2.2 Django W ...

  7. iphone如何最快已读全量未读短信

    iphone如何最快已读全量未读短信 iPhone 15.6 版本,偶然间发现一个可以用来一键已读全部短信的操作小技巧介绍给大家: 1.短信界面双指左滑或右滑,进入多选模式 2.将已勾选项点掉,左下角 ...

  8. socket未读消息 如何设计_如何设计IM系统的消息架构?

    导读:IM全称是『Instant Messaging』,中文名是即时通讯.在高度信息化的移动互联网时代,生活中IM类产品已经成为必备品,像"钉钉"以IM为核心功能的产品.还有一些非 ...

  9. java实现未读消息提醒_Android自定义View之未读消息提示

    一个轻量级的仿微信未读消息提示 大家好,我是接触安卓不久的小菜鸟,今天花了一晚上封装了一个类似微信未读消息提示的安卓控件.由于技术问题,所以功能不是很强大,没有动画,但是满足基本需求还是可以的.下面是 ...

最新文章

  1. 管道、重定向、vim文本编辑器
  2. 【组合数学】生成函数 ( 使用生成函数求解多重集 r 组合数 )
  3. lamp安装指南(转)
  4. x264_sps_init
  5. Ubuntu下安装opencv3.4.6+opencv_contrib
  6. LINUX下查看CPU使用率的命令[Z]
  7. [CIFS]解决linux挂载CIFS提示 HOST is down
  8. 在域控制器上安装Exchange 2003的注意事项
  9. Office 2007中的config.xml个性定制说明
  10. 初级软考程序员科目一考什么内容?
  11. [DevExpress使用随笔]之BarManager控件中创建MainMenu
  12. 普通人的编辑利器——Vim
  13. java讲师助理面试题_面试Java开发师常问到的5个问题(附答案)
  14. 天天基金网高收益基金列表数据保存到Excle中#python爬虫小试牛刀之openpyxl
  15. 小黄鸡 php,Simsimi (小黄鸡) API接口(PHP)公布,小黄鸡API接口非官方PHP版本来啦...
  16. 他一生仅凭252个字,就傲视千古…
  17. Two-Stream Convolutional Networksfor Action Recognition in Videos——学习笔记
  18. 战略变了 IBM服务器由产品到解决方案的转变
  19. word2013设置封面,摘要,正文不同的页码格式
  20. 有了这几款软件,就不用纠结拍照识别植物的软件哪个好了

热门文章

  1. mysql 整理 是什么意思_MySQL问答整理
  2. 【致青春】致我终将逝去的22年的青春
  3. D53 LeetCode 587.安装栅栏(困难)
  4. HDFS与Hive实战 + 滴滴出行数据分析
  5. 【创业邦·年度创业人物】刘强东:十年战争与千亿美金帝国梦
  6. 麻省理工学院研发可编程数字纤维
  7. elasticsearch8.2集群部署
  8. PDA 查找无线报错 :Scan Error
  9. 你知道数据中台,但你不知道它和ERP、数据仓库背后的关系
  10. 基于Sql Server 2000的分布式数据库的实践