三、BBS首页搭建、admin后台管理、暴露上传文件
首页搭建1、动态展示用户名称{% if request.user.is_authenticated %}
<li><a href="#">{{ request.user.username }}</a></li>
<li class="dropdown">{% else %}
<li><a href="{% url 'login' %}">登录</a></li> 反向解析跳转
<li><a href="{% url 'reg' %}">注册</a></li> 反向解析跳转
{% endif %}
2、更多操做①修改密码前端HTML及JS发送ajax请求<li><a href="#" data-toggle="modal" data-target=".bs-example-modal-lg">修改密码</a></li><div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<h1 class="text-center">修改密码</h1>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="form-group">
<label for="">用户名</label>
<input type="text" disabled value="{{ request.user.username }}" class="form-control">
</div>
<div class="form-group">
<label for="">原密码</label>
<input type="password" id="id_old_password" class="form-control"> {# 这里不写那么的原因是用ajax提交的,如果是form表单提交数据就要写name后端才能获取到值 #}
</div>
<div class="form-group">
<label for="">新密码</label>
<input type="password" id="id_new_password" class="form-control">
</div>
<div class="form-group">
<label for="">确认密码</label>
<input type="password" id="id_confirm_password" class="form-control">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal" style="margin-bottom: 10px">取消</button>
<button class="btn btn-primary " style="margin-bottom: 10px" id="id_edit">修改</button>
<span style="color: red" id="password_error"></span>
</div>
</div>
</div>
</div>
</div>
</div><script>
$('#id_edit').click(function (){
$.ajax({
url:'/set_password/',
type:'post',
data:{
'old_password':$('#id_old_password').val(),
'new_password':$('#id_new_password').val(),
'confirm_password':$('#id_confirm_password').val(),
'csrfmiddlewaretoken':'{{ csrf_token }}'
},
success:function (args){
if(args.code=1000){
window.location.reload // 可以点href跳转也可以reload刷新页面
}else{
$('#password_error').text(args.msg)
}
}
})
})
</script>
后端数据处理from django.contrib import auth配置文件settings中 LOGIN_URL = '/login/'@login_required
def set_password(request):
if request.is_ajax(): # 用ajax只用来处理修改密码
back_dic = {'code':1000,'msg':''} # ajax一定要设置一个字典返回给前端
if request.method == 'POST':
old_password = request.POST.get('old_password')
new_password = request.POST.get('new_password')
confirm_password = request.POST.get('confirm_password')
is_right = request.user.check_password(old_password)
if is_right:
if new_password == confirm_password:
request.user.set_password(new_password)
request.user.save()
back_dic['msg']='修改成功'
else:
back_dic['code']=1001
back_dic['msg']='两次密码不一致'
else:
back_dic['code']=1002
back_dic['msg']='原密码错误'
return JsonResponse(back_dic)
②退出登录后端代码@login_required
def logout(request):
auth.logout(request)
return redirect('/login/')前端代码<li><a href="{% url 'logout' %}">退出登录</a></li> 可以利用反向解析也可以自己写路由
二、搭建首页-后台 管理创建表数据①先在admin.py文件下注册from django.contrib import admin
from app01 import models
admin.site.register(models.UserInfo) # 虽然我们自定义了表名Userinfo,但是在后台管理中我们还是看到是源生的User表注意一下,但是路由匹配操做表还是用Userinfo
admin.site.register(models.Blog)
admin.site.register(models.Tag)
admin.site.register(models.Category)
admin.site.register(models.Article)
admin.site.register(models.UpAndDown)
admin.site.register(models.Comment)
admin.site.register(models.Article2Tag)
②admin管理数据增删改查的原理[关键点在于urls.py自带的会给每一个注册的模型表自动生成增删改查四条url]
http://127.0.0.1:8000/admin/app01/userinfo/查
http://127.0.0.1:8000/admin/app01/userinfo/add/ 增
http://127.0.0.1:8000/admin/app01/userinfo/5/change/ 改
http://127.0.0.1:8000/admin/app01/userinfo/1/delete/ 删③把所有表的数据的关系绑定好就大功告成了
三、用户头像展示-暴露图片资源1、网站所使用的静态文件默认放在static文件夹下
2、用户上传的静态文件也应该单独放在某个地方存储
media配置
该配置可以让用户上传的所有文件都固定存放在某一个指定的文件夹下
MEDIA_ROOT = os.path.join(BASE_DIR,'media') # 文件名随你自己
会自动开设后端指定文件夹资源
如何开设后端指定的文件夹资源
1、首先你需要自己去url.py手动书写代码
2、暴露后端指定文件夹资源
url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT})这样操作就可以直接访问到该图片的地址的路径了
BBS项目media配置用户头像展示
# 暴露后端指定文件夹资源url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}), 把代码中的静态文件暴露给用户url(r'^app01/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}) 源码暴露
页:
[1]