bbs论坛注册功能(1)
分析项目需求创建表:
STATICFILE_DIR = [
os.path.join(BASE_DIR,'static') #设置目录,bootstrip添加到目录中去,直接本地调用
]
# auth默认表
AUTH_USER_MODEL='app01.UserInfo' # 医用应用app01的userinfo表,不在使用默认的user表
from django.db import models
from django.contrib.auth.models import AbstractUser # Create your models here. # 定义用户表
class UserInfo(AbstractUser):
phone = models.BigIntegerField(null=True)
create_time = models.DateField(auto_now_add=True)
# 存储头像文件,把文件存放到avatar目录下,只存放路径信息
avatar = models.FileField(upload_to='avatar/', default='avatar/default.png') blog= models.OneToOneField(to='Blog',null=True) # 定义个人站点表
class Blog(models.Model):
# 站点名称
site_name = models.CharField(max_length=32)
# 站点标题
site_title = models.CharField(max_length=32)
# 个人站点样式文件,存该样式文件的路径
theme = models.CharField(max_length=64) # 文章分类表
class Category(models.Model):
name = models.CharField(max_length=64) blog = models.ForeignKey(to='Blog',null=True) # 文章标签表
class Tag(models.Model):
name = models.CharField(max_length=32) blog = models.ForeignKey(to='Blog',null=True) # 文章表
class Article(models.Model):
# 文章标题
title = models.CharField(max_length=64)
# 文章简介
desc = models.CharField(max_length=256)
# 文章详情,TextField存储大量文本
content = models.TextField()
# 文章创建时间
create_time= models.DateField(auto_now_add=True)
# 查询优化
# 评论数
comment_num = models.IntegerField()
# 点赞数
up_num = models.IntegerField()
# 点踩数
down_num = models.IntegerField() blog = models.ForeignKey(to='Blog',null=True)
category = models.ForeignKey(to='Category',null=True)
# 隐藏关联表
tags = models.ManyToManyField(to='Tag',through='Article2Tags',through_fields=('article','tag'))
# 创建article与tags的关系表第三张表
class Article2Tags(models.Model):
article = models.ForeignKey(to='Article')
tag = models.ForeignKey(to='Tag') # 点赞点踩表
class UpAndDown(models.Model):
# 用户
user= models.ForeignKey(to='UserInfo')
# 文章字段
article = models.ForeignKey(to='Article')
# 存点赞数
is_up = models.BooleanField() # 文章评论表
class Commnet(models.Model):
# 用户字段
user=models.ForeignKey(to='UserInfo')
# 文章字段
article = models.ForeignKey(to='Article')
# 评论内容
content = models.CharField(max_length=256)
# 评论时间
create_time = models.DateField(auto_now_add=True)
# 父评论
parent = models.ForeignKey(to='self',null=True)
设置后台views.py
from django.shortcuts import render,HttpResponse
from app01 import myforms def register(reques):
form_obj = myforms.MyForm()
return render(reques,'register.html',locals())
前端设置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册账号</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>注册页面</h1>
<form id="myform">
{% csrf_token %}
{% for foo in form_obj %}
<div class="form-group">
<label for="{{ foo.auto_id }}">{{ foo.label }}</label>
{{ foo }}
{# 加载对应输入框的提示信息#}
<span class="errors"></span>
</div>
{% endfor %}
</form>
<div class="form-group">
{# 点击图片也可以删除文件#}
<label for="id_myfile">头像
<img src="/static/img/default.png" alt="" width="60" style="margin-left: 10px">
</label>
<input type="file" name="myfile" id="id_myfile" style="display: none">
</div>
<button class="btn btn-primary pull-right">注册</button>
</div>
</div>
</div>
</body>
</html>
实现点击头像上传图片后在头像上显示上传的头像
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册账号</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>注册页面</h1>
<form id="myform">
{% csrf_token %}
{% for foo in form_obj %}
<div class="form-group">
<label for="{{ foo.auto_id }}">{{ foo.label }}</label>
{{ foo }}
{# 加载对应输入框的提示信息#}
<span class="errors"></span>
</div>
{% endfor %}
</form>
<div class="form-group">
{# 点击图片也可以删除文件#}
<label for="id_myfile">头像
<img src="/static/img/default.png" alt="" width="80" style="margin-left: 10px" id="id_img">
</label>
<input type="file" name="myfile" id="id_myfile" style="display: none">
</div>
<button class="btn btn-primary pull-right">注册</button>
</div>
</div>
</div>
<script>
$('#id_myfile').change(function () {
//获取上传的文件对象
let fileobj=this.files[0];
//生成一个文件阅读器对象
let fileReader = new FileReader();
//将文件独放入文件阅读器中
fileReader.readAsDataURL(fileobj);
{#fileReader文件读取图片完成后再进行渲染#}
///动态显示头像
//等待文件加载完毕后在展示
fileReader.onload = function(){
//将读取出文件对象替换到img标签
$('#id_img').attr('src',fileReader.result)
}
}) </script>
</body>
</html>
往后端传送数据使用ajax
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册账号</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h1>注册页面</h1>
<form id="myform">
{% csrf_token %}
{% for foo in form_obj %}
<div class="form-group">
<label for="{{ foo.auto_id }}">{{ foo.label }}</label>
{{ foo }}
{# 加载对应输入框的提示信息#}
<span class="errors pull-right" style="color: red"></span>
</div>
{% endfor %}
</form>
<div class="form-group">
{# 点击图片也可以删除文件#}
<label for="id_myfile">头像
<img src="/static/img/default.png" alt="" width="80" style="margin-left: 10px" id="id_img">
</label>
<input type="file" name="myfile" id="id_myfile" style="display: none">
</div>
<button class="btn btn-primary pull-right" id="id_submit">注册</button>
</div>
</div>
</div>
<script>
$('#id_myfile').change(function () {
//获取上传的文件对象
let fileobj=this.files[0];
//生成一个文件阅读器对象
let fileReader = new FileReader();
//将文件独放入文件阅读器中
fileReader.readAsDataURL(fileobj);
{#fileReader文件读取图片完成后再进行渲染#}
///动态显示头像
//等待文件加载完毕后在展示
fileReader.onload = function(){
//将读取出文件对象替换到img标签
$('#id_img').attr('src',fileReader.result)
}
});
//ajax提交数据
$('#id_submit').click(function () {
//生成一个formdata对象
let formData = new FormData();
//往formData中添加键值
$.each($('#myform').serializeArray(), function (index, obj) {
{#console.log(index,obj)#}
formData.append(obj.name,obj.value)
});
//手动添加文件数据
formData.append('myfile',$('#id_myfile')[0].files[0]);
$.ajax({
url:'',
type:'post',
//发送formData需要制定参数,数据不做处理
data:formData,
processData:false,
contentType:false,
success:function (data) {
console.log(data)
if (data.code == 100){
//跳转页面
location.href = data.url
} else{
$.each(data.msg,function (index,obj) {
console.log(index,obj)
let targetID = '#id_'+ index; //id_username,id_password
$(targetID).next().html(obj[0])
})
}
}
})
$('input').focus(function () {
$(this).next().html('')
})
})
</script>
</body>
</html>
from django.shortcuts import render
from app01 import myforms
from app01 import models
from django.http import JsonResponse # Create your views here.
def register(request):
back_dic={'code':100,'msg':''}
form_obj = myforms.MyForm()
if request.method == 'POST':
form_obj = myforms.MyForm(request.POST)
print(request.POST)
# 判断数据是否存在,存在返回true,不存在返回false
print(form_obj.errors) print(form_obj.is_valid())
if form_obj.is_valid():
data = form_obj.cleaned_data
# 将coonfirm_password去除掉
data.pop('confirm_password')
# 获取用户上传头像文件
file_obj = request.FILES.get('myfile')
# 判断用户是否上传了自己的头像
if file_obj:
# 数据库中头像路径字段是avator
data['avatar']=file_obj
models.UserInfo.objects.create_user(**data)
back_dic['msg']= '注册成功'
back_dic['url']='/login/'
else:
back_dic['code']=101
# 错误信息返回前台
back_dic['msg']=form_obj.errors
return JsonResponse(back_dic)
return render(request, 'register.html', locals())
实现效果:前台输入信息完成注册,输入错误提示红色信息,再次点击窗扣错误信息消失
bbs论坛注册功能(1)的更多相关文章
- BBS论坛 注册功能
三.注册功能 # views.py文件 def register(request): back_dic = {'code': 100, 'msg': ''} form_obj = myforms.My ...
- BBS论坛 登录功能
四.登录功能 前端页面html代码: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- python第一百三十天 ---简单的BBS论坛
简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考“抽屉新热榜” + “博客园” 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 ...
- Django项目 BBS论坛
BBS论坛 一.项目表分析 二.自定义form组件 三.注册功能 四.BBS论坛 登录功能
- BBS(第一天)项目之 注册功能实现通过forms验证与 前端ajax请求触发查询数据库判断用户是否存在的功能实现
1.BBS项目之注册功能通过forms验证 from django import forms from blog.models import User from django.contrib.auth ...
- bbs论坛登录相关功能(2)
昨天把注册功能页面做出来,接下来就是登录页面 登录功能: 1,用户账号,密码后台效验,错误信息在登录按钮右边显示 2.验证码,根据图片生成,点击图片刷新产生新的验证码 修改密码 注册 先把前端页面lo ...
- BBS注册功能
BBS注册功能 一.后端 1.组件校验数据 """ @author RansySun @create 2019-11-03-11:35 """ ...
- BBS登录与注册功能
登录功能 视图函数 def my_login(request): if request.method == 'GET': return render(request, 'login.html') el ...
- Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点
开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...
随机推荐
- kafka消费服务调优
1.消费服务速度跟不上 2.top -H 观察是哪个线程最忙 3.多次使用jstack,看看最忙的那个线程在做什么
- JavaScirpt 认识DOM和BOM (汇总)
将HTML代码分解为DOM节点层次图 DOM节点有: 1. 元素节点:上图中<html>.<body>.<p>等都是元素节点,即标签. 2. 文本节点:向用户展示的 ...
- 887. 求组合数 III(模板 卢卡斯定理)
a,b都非常大,但是p较小 前边两种方法都会超时的 N^2 和NlongN 可以用卢卡斯定理 P*longN*longP 定义: 代码: import java.util.Scanner ...
- openlayers轨迹播放
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在Ubuntu中建立软连接
使用ln 命令 今天发现我的python3命令没了,出现了以下提示: /usr/bin/python3: bad interpreter: No such file or directory 查找原因 ...
- Docker安装部署es集群
Docker安装部署es集群:环境准备:已安装docker的centos服务器一台1. 拉取es版本docker pull elasticsearch:5.6.82. 新建文件夹 数据挂载目录 和 配 ...
- hyper-v虚拟机不能访问外网的解决方案
直接说解决方案,将虚拟机的一张网卡改为旧版网络适配器即可.具体原因还不可知. 延申一下,一般应该使用的交换机,是“外部”类型即可.
- 【基础问题】String 类型为什么是final类型
关于为什么此类问题,都能列出12345...种种原因 已创建具体的值不可修改,故本身就是线程安全的,放到多线程中也不会担心被修改,支持在多线程中共享自身 . 因为字符串是不可变的,所以在它创建的时候H ...
- python2.6升级python2.7后,yum不能用了,如何解决
背景: 跑python的case时候,发现log功能不好用,于是升级了python2.6-->python2.7 but,升级之后,发现yum命令不好用了.怎么办? 百度搜了一下,如何解决: 参 ...
- [CF1304C] Air Conditioner
维护一区间 \([l,r]\) 人按照时间升序 考虑 \((l_i, h_i, t_i)\),当前的所有区间与这个区间取交 推到 \(t_{i+1}\) 时,所有区间的端点向两边扩张即可 注意把空掉的 ...