前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python Web聊天室--首页

Python Web聊天室--首页

作者头像
py3study
发布2020-01-07 23:31:20
1.5K0
发布2020-01-07 23:31:20
举报
文章被收录于专栏:python3python3

今天来完成我们聊天室的首页

  1. 首先创建app
代码语言:javascript
复制
manage.py?startapp?chat

2.编辑视图文件(chat/views.py)

# chat/views.py

代码语言:javascript
复制
#?需要导入的包,有些包目前还没有用到,但是以后会用
from?django.shortcuts?import?render_to_response,?HttpResponse
from?chat.models?import?ChatRoom,?RoomAccount,?ChatPool
from?django.contrib.auth.decorators?import?login_required
from?django.contrib.auth.models?import?User
import?json

#?添加一个用户认证的装饰器,功能是检测访问页面的用户是否已经登录
#?如果没有登录则跳转到登录界面
@login_required(login_url='/account/login')
def?index(request):
???user?=?request.user
???RoomObj?=?ChatRoom.objects.all()
???#?第二个参数是传给template的字典,我们之后可以再template里调用这些数据
???return?render_to_response("chat/index.html",?{'user':?user,?'RoomObj':?RoomObj})

我们还需要改一下之前用户认证里的views文件

# account/views.py

代码语言:javascript
复制
def?login(request):
???data?=?{'loginStatus':?''}
???if?request.method?==?'POST':
??????username?=?request.POST.get('username')
??????password?=?request.POST.get('password')
??????user?=?auth.authenticate(username=username,?password=password)
??????if?user?is?not?None:
?????????auth.login(request,?user)
?????????#?改动了这里,意思是登录成功后跳转到/chat
?????????return?HttpResponseRedirect('/chat')
??????data['loginStatus']?=?u'用户名或密码错误!'
???return?render_to_response('account/login.html',?data,?context_instance=RequestContext(request))

2.在app里创建urls文件

# ChatRoom/urls.py

代码语言:javascript
复制
urlpatterns?=?patterns(
???'',
???url(r'^admin/',?include(admin.site.urls)),
???url(r'^account/',?include('account.urls')),
???#?新添加的内容
???url(r'^chat/',?include('chat.urls')),
)

# chat/urls.py

代码语言:javascript
复制
urlpatterns?=?patterns(
???'',
???#?意思是uri是'/chat'时交给views.index函数处理
???url(r'^$',?views.index),
)

3.编辑models文件

# chat/models.py

代码语言:javascript
复制
#?这个表用来保存房间名
class?ChatRoom(models.Model):
???#?参数表示最长8字节,并且不可重复
???roomname?=?models.CharField(max_length=8,?unique=True)

???#?在admin中显示的名字
???def?__unicode__(self):
??????return?self.roomname

修改配置文件setting.py

代码语言:javascript
复制
#?添加后我们在syncdb时才会同步chat中的models
INSTALLED_APPS?=?(
???...
???'chat',
)

同步数据库

代码语言:javascript
复制
manage.py?makemigrations
manage.py?syncdb

在admin中注册

# chat/admin.py

代码语言:javascript
复制
from?django.contrib?import?admin
from?chat.models?import?ChatRoom,?RoomAccount,?ChatPool
#?Register?your?models?here.
admin.site.register(ChatRoom)

启动应用,然后访问http://IP/admin

在admin中添加两个聊天室

4.编辑template文件

首先在templates下创建两个创建两个目录,layout和chat

在layout里创建base.html(基础模板,我们可以在其他的模板里调用这个,可以减少代码重复率)

这个模板我们是根据bootstrap官网给出的模板来修改的http://v3.bootcss.com/examples/non-responsive/?更多资料可以参考官方文档

# templates/layout/base.html

代码语言:javascript
复制
<!DOCTYPE?html>
<html?lang="zh-CN">

??<head>
????<meta?charset="utf-8">
????<meta?http-equiv="X-UA-Compatible"?content="IE=edge">
????<title>ChatRoom</title>
????//?调用bootstrap的css文件
????<link?href="/static/bootstrap/css/bootstrap.css"?rel="stylesheet">
????<link?href="/static/css/non-responsive.css"?rel="stylesheet">
????//?添加一个块,可以在之后的子文件中用,更多资料参考jinja2官方文档
???{%?block?css?%}{%?endblock?%}
??</head>

??<body>
????//?导航栏
????<nav?class="navbar?navbar-default?navbar-fixed-top">
??????<div?class="container">
????????<div?class="navbar-header">
??????????<a?class="navbar-brand"?href="#">ChatRoom</a>
????????</div>
????????<div?id="navbar">
????????{%?block?nav-left?%}{%?endblock?%}
??????????<ul?class="nav?navbar-nav?navbar-right">
????????????//?一个下拉菜单,可以控制用户注销,更改密码,编辑资料等
???????????<li?class="dropdown?">
??????????????<a?href="#"?class="dropdown-toggle"?data-toggle="dropdown"?role="button"?aria-expanded="false">{{?user.username?}}?<span?class="caret"></span></a>
??????????????<ul?class="dropdown-menu??dropdown-menu-left"?role="menu">
????????????????<li><a?href="#">主页</a></li>
????????????????<li><a?href="#">设置</a></li>
????????????????<li?class="divider"></li>
????????????????<li><a?href="/account/logout">注销</a></li>
??????????????</ul>
????????????</li>
????????????
??????????//?一个搜索框,目前还用不到,放着好看点吧:D
?????????<form?class="navbar-form?navbar-left"?action="">
????????????<div?class="form-group">
??????????????<input?type="text"?class="form-control"?placeholder="Search">
????????????</div>
????????????<button?type="submit"?class="btn?btn-default">搜索</button>
????????????</form>
??????????</ul>
????????</div><!--/.nav-collapse?-->
??????</div>
????</nav>

????<div?class="container">

??????{%?block?content?%}{%?endblock?%}

????</div>?<!--?/container?-->
????
????//?引用jQuery
????<script?src="/static/js/jquery-1.11.2.js"></script>
????<script?src="/static/bootstrap/js/bootstrap.js"></script>
???{%?block?js?%}{%?endblock?%}
??</body>
</html>

下面编辑我们聊天室的首页文件

# templates/chat/index.html

代码语言:javascript
复制
//?引用base.html文件
{%?extends?"layout/base.html"?%}

//?导航栏
{%?block?nav-left?%}
???<ul?class="nav?navbar-nav">
???????//?'active'类表示活动页面,'disabled'表示禁用不可选的项目
??????<li?class="active"><a?href="/chat/">首页</a></li>
??????<li?class="disabled"><a>聊天室</a></li>
???</ul>
{%?endblock?%}

//?内容
{%?block?content?%}
???<div?id="home">
??????<div?class="page-header">
??????//?这个user就是我们前面在views里传到后台的字典,这里就可以调用了
??????<h1>{{?user?}},欢迎来到聊天室!</h1>
??????<h3>全部房间</h3>
??????</div>
??????//??房间列表
??????<table?class="table?table-striped">
?????????<thead>
????????????<tr>
???????????????<th>房间序号</th>
???????????????<th>房间名</th>
????????????</tr>
?????????</thead>
?????????<tbody>
????????????{%?for?item?in?RoomObj?%}
???????????????<tr>
??????????????????<th>{{?item.id?}}</th>
??????????????????<th><a?href="/chat/{{?item.id?}}">{{?item?}}</a></th>
???????????????</tr>
????????????{%?endfor?%}
?????????</tbody>
??????</table>
???</div>
{%?endblock?%}

5.查看效果

我们启动django,来看下完成后的效果

我们访问http://IP/chat/会跳转到登录页面,如果之前没登录的话

wKioL1UUy06wSYfaAABYxcTYrQE010.jpg
wKioL1UUy06wSYfaAABYxcTYrQE010.jpg

然后我们登录,用户密码就是之前在syncdb时,系统提示我们创建的用户

登陆成功后就会跳转到首页,聊天室的名字是之前在admin中创建的

wKiom1UUyuji1KIjAADmPU6Q1Jc992.jpg
wKiom1UUyuji1KIjAADmPU6Q1Jc992.jpg

到这里我们的首页就搞定了,聊天室的页面我们下次再更新

源码地址:?https://github.com/cheney93/ChatRoom

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com