其他分享
首页 > 其他分享> > BBS项目总结

BBS项目总结

作者:互联网

目录

BBS总结

后端

1.如果要用forms组件就要先产生一个空对象
2.pillow模块
  from PIL import Image,ImageFont,ImageDraw
  Image # 生成图片对象
  ImageDraw # 生成画笔对象,可以在图片上乱涂乱画
  ImageFont # 如果生成文字可以控制字体的样式
   案例:img_obj=Image.new('RGB',(350,35),三个数字产生颜色)
       drow_obj=ImgDraw.Draw(img_obj)
       font_obj=ImageFont.truetype('字体文件路径',字体大小)
       draw_obj.text((i*60+45,0),产生的随机数字,font=font_obj)
  验证码可以存在session中便于后须取出比对
3.io模块
  from io import BytesIO,StringIO
  BytesIO  # 将数据保存在内存中取时以bytes类型返回
  StringIO  # 内存中保存数据且取时返回字符串
  案例:
  io_obj=BytesIO()
  img_obj.save(io_obj,'png')
  取io对象内的值io_obj.getvalue()
4.让前端识别语法的方法
  from django.utils.safestring import mark_safe
  mark_safe('前端代码')
5.bs4模块优化xss攻击问题
  from bs4 import BeautifulSoup
  soup=BeautifulSoup('content','lxml') # 产生一个对象
  tags=soup.find_all() # 取出所有的标签
  tag.decompose()  # 移除标签
6.获取前端中的单选和多选
  get('name属性')
  getlist('name属性')
7.对于request.user属性的修改
  request.user.属性=新属性
  此操作临时之后修改要保存
  request.user.save()
8.对于手动创建的第三张表关系
  首先要有这个对象
  再将它的多个关系通过for循环出来之后
   article_obj = models.Article.objects.filter(pk=article_pk).first()
  tag_id_list = request.POST.getlist('tag')  # 多选  [1,2,3,4]
  obj_list = []
  for tag_id in tag_id_list:                           obj_list.append(models.Article2Tag(article=article_obj, tag_id=tag_id))
  models.Article2Tag.objects.bulk_create(obj_list)
9.forms组件内控制文本框属性
    widget=forms.widgets.TextInput(attrs={'class': 'form-control'})
     widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'})
     widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'})
       widget=forms.widgets.EmailInput(attrs={'class': 'form-control'})
   钩子函数:钩什么返回什么
   self.add_error('字段','错误提示')
10.自关联
  ForeignKey(to='self',null=True)
11.表再django注册与显示设置
  admin.site.register(models.表名)
  继承自带的认证表
  from django.contrib.auth.models import AbstractUser
  对于后台对表的展示在表内定义
   class Meta:
        verbose_name_plural = '用户表'
   def __str__(self):
    return self.想展示的字段名
12.处理时间的模块
   from django.db.models.functions import TruncMonth
   date_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values(
        'month').annotate(c=Count('pk')).values(
        'month', 'c')
  时间报错处理方法
  修改配置  TIME_ZONE = 'UTC'改为TIME_ZONE = 'Asia/Shanghai',USE_TZ = False
指定认证表 AUTH_USER_MODEL = 'app01.UserInfo'
指定登录装饰器跳转的路由配置LOGIN_URL = '/login/'
指定用户上传文件的存放位置
MEDIA_ROOT = os.path.join(BASE_DIR, '指定文件夹名')
13.暴露项目中的资源
from django.views.static import serve
固定书写路由
url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT})

前端js总结

1.注册用户点击更换头像实时展示
  // 用户头像实时展示
    $('#avatar').change(function () {
        // 1.产生一个文件阅读器对象
        let myFileReader = new FileReader();
        // 2.获取用户上传的头像文件
        let avatarObj = this.files[0];
        // 3.将文件对象交给阅读器加载
        myFileReader.readAsDataURL(avatarObj)  // IO操作 需要消耗时间 但是是异步
        // 4.修改img标签的src属性
        // 等待文件阅读器对象加载完毕之后再修改src属性
        myFileReader.onload = function(){
            $('#img').attr('src',myFileReader.result)
        }
    })
2.获取文件数据找到forms组件渲染的标签值
  利用的主要是form表单生成标签
    $.each($('#form').serializeArray(),function (index,dictObj) {
    myFormData.append(dictObj.name,dictObj.value)
        })
   对于标签对象.files[0]
   jquery查找的标签[0].files[0]
   携带文件的参数
   contentType:false
   processDate:false
  // 获取到了所有的字段错误提示 如何对应展示???
  // 研究发现 渲染出来的标签id值都是 id_字段名  而后端返回的错误提示键是字段名 所以拼接即可
  $.each(args.msg, function (i,j) {
  let eleId = '#id_' + i;
 $(eleId).next().text(j[0]).parent().addClass('has-error')
3.对于点击验证码
  处理思路可以是将src属性值加上其他的符号即可重新发送请求获取
4.模板语法通过ajax传值需要变量要加上引号
5.针对有多个选项让用户选择时
   {% for tag in tag_list %}
                <input type="checkbox" name="tag" value="{{ tag.pk }}">{{ tag.name }}
            {% endfor %}
6.编辑时有多个默认值时
  {% for tag in tag_list %}
                {% if tag in article_obj.tags.all %}
                        <input type="checkbox" name="tag" value="{{ tag.pk }}" checked>{{ tag.name }}
                {% else %}
                        <input type="checkbox" name="tag" value="{{ tag.pk }}">{{ tag.name }}
                {% endif %}
            {% endfor %}
7.富文本类型
    <script charset="utf-8" src="/static/kindeditor/kindeditor-all-min.js"></script>
        <script>
                KindEditor.ready(function(K) {
                        window.editor = K.create('#d1',{
                            width: '100%',
                            height:'600px',
                            resizeType:1,
                            uploadJson : '/file_upload/',
                            extraFileUploadParams : {
                                    csrfmiddlewaretoken:'{{ csrf_token }}'
                            }
                        });
                });
        </script>

标签:总结,obj,name,项目,list,forms,tag,BBS,id
来源: https://www.cnblogs.com/ll71979461/p/16369424.html