1.注册功能

1.注册功能往往都会由很多校验性的需求 所以这里我们用到了forms组件

项目中可能有多个地方需要用到不同的forms组件 为了解耦合 但是创建一个py文件 专门用来存放项目用到的所有的forms组件

校验 用户名 密码 确认密码 邮箱

借助于钩子函数 校验用户名是否存在 密码与确认密码是否一致

2.创建路由 写视图函数

将实例化产生的forms类对象 利用模板语法传递到前端页面

再利用forms组件自动渲染前端获取用户输入的标签

3.用户输入数据后 采用ajax的方式朝后台提交数据

1.考虑到获取用户输入的input框可能会有很多 在同ajax获取的时候 可能会比较繁琐

借助了form标签有一个方法 自动将内部所有的普通键值 打包成一个容器类型

  1. 4.用户头像前端动态展示
  2. 利用内置对象 文件阅读器 new FileReader
  3. 等待什么什么加载完毕再执行 onload
  4. window.onload
  5. fileReader.onload = function(){
  6. 文件阅读器加载完毕之后 再执行的操作
  7. }
  8. 5.针对ajax提交的数据 后端在返回信息的时候 通常都是一个字典
  9. 在创建数据的时候利用**直接打散字典的形式 传输数据
  10. 6.将错误的信息传递给前端
  11. 前端渲染错误信息的时候 遇到了一个问题 如何将对应的信息渲染到对应的input框下面的span标签中
  12. 研究forms组件渲染的input框的id值的特点 id_字段名
  13. 发现后端传过来的字典的key就是一个个的字段名 自己拼接处id
  14. 2.登录功能
  15. 1.前端页面搭建
  16. 图片验证码
  17. 2.图片验证码
  18. img标签 src可以接收的数据
  19. 1.图片的具体路径
  20. 2.图片的二进制数据
  21. 3.后端url(自动朝该url发送get请求)
  22. 3.后端代码推导
  23. 操作图片的模块pillow
  24. 4.完成后跳转到网站首页
  25. 展示网站所有的博客内容





django

​ django是什么

​ web框架 django是一款专门用来开发app的web框架

​ 框架 就是类似于提前帮你搭建好整个项目的基础架构



​ 纯手撸的web框架

​ 统一接口

​ 先砸钱 先让用户对你这个软件产生依赖 然后你再慢慢的抽血

​ 共享单车



HTTP协议 >>> sql语句

为什么要有HTTP协议 一个服务端要服务N多个不同的客户端 如何保证数据的正常交互

为什么要有sql语句 一个服务端要服务N多个不同的客户端 如何保证数据的正常交互

web框架

​ django

​ flask

​ 三行代码

​ tronado

​ 自己去百度收一收

django版本问题

django == 1.11.11

  1. requiretment.txt
  2. django == 1.11.11
  3. django == 1.11.11
  4. django == 1.11.11
  5. django == 1.11.11
  6. django == 1.11.11
  7. django == 1.11.11
  8. django == 1.11.11
  9. django == 1.11.11
  10. django == 1.11.11



django基本操作命令

​ 创建一个django项目

​ django-admin startproject 项目名

​ 启动django项目

​ python manage.py runserver

​ 创建应用(app01/app02) web option

​ python manage.py startapp 应用名

​ 数据库迁移命令

​ python manage.py makemigrations

​ python manage.py migrate

​ # 报错 中文的问题

​ # 报错 django源码多了一个逗号

浏览器 >>> nignx + web服务网关接口(wsgiref,uwsgi) >>> 中间件(全局性的功能) >>> 路由层 >>> 视图层 >>> 模板层 + 模型层(ORM查询) + 数据库

web服务网关接口

django默认的是wsgiref

上线之后该用uwsgi

WSGI与wsgiref,uwsgif关系

前者是协议 后者是实现该协议的功能模块

请求到达django后端和响应离开django后端都必须结果中间件

django默认有七个中间件 并且支持用户自定义中间件

自定义中间件有五个可以自定义的方法

需要掌握

process_request

process_response

需要了解

process_view

process_exception

process_template_response

# 形参中有response的 一定要将该形参返回

# 写好的中间件 一定要在配置文件中注册

设计思想

importlib

反射

# 都是操作字符串

路由层

url(r'^index/',view.index)

  1. 1.路由匹配
  2. url的第一个参数 是一个正则表达式
  3. 在匹配的时候 有一个特点 一旦匹配上了 会立刻停止匹配 执行路由对应的方法
  4. 2.无名分组(位置参数)
  5. url(r'^index/(\d+)',view.index)
  6. 3.有名分组(关键字参数)
  7. url(r'^index/(?P<year>\d+)',view.index)
  8. 4.反向解析
  9. 静态文件的配置
  10. url(r'^index/',view.index,name='index') # 这个名字一定要是在整个django项目中唯一
  11. {% url 'index' %}
  12. reverse('index')
  13. url(r'^index/(\d+)',view.index)
  14. {% url 'index' 1 %}
  15. reverse('index',args=(1,)) # 容器类型 哪怕只有一个元素 你也习惯性的加一个逗号
  16. url(r'^index/(?P<year>\d+)',view.index)
  17. {% url 'index' 1 %}
  18. {% url 'index' year=1 %}
  19. reverse('index',args=(1,)) # 容器类型 哪怕只有一个元素 你也习惯性的加一个逗号
  20. reverse('index',kwargs={'year':1,}) # 容器类型 哪怕只有一个元素 你也习惯性的加一个逗号
  21. 5.路由分发(******)
  22. include
  23. url(r'^应用名1/',include('应用名1.urls'))
  24. url(r'^应用名2/',include('应用名2.urls'))
  25. 6.名称空间
  26. url(r'^应用名1/',include('应用名1.urls',namespace='应用名1'))
  27. url(r'^应用名2/',include('应用名2.urls',namespace='应用名2')))
  28. reverse('应用名1:别名')
  29. reverse('应用名2:别名')

视图层

HttpResponse

  1. render
  2. redirect
  3. JsonResponse
  4. FBVCBV
  5. 只要是视图函数 一般情况下都需要定义一个形参request
  6. CBV的书写及内部原理
  7. from django.views import View
  8. class MyReg(View):
  9. def get(self,request):
  10. pass
  11. url(r'^index/',MyReg.as_view())
  12. # url(r'^index/',view)



​ view里面

​ 1.实例化产生自己写的类的对象

​ 2.对象点dispatch方法

​ dispatch里面

​ 1.先确认请求方式(默认八个)

​ 2.反射获取方法的内存地址

​ 3.加括号执行对应的方法



模型层

​ 模板语法

​ 变量相关 {{}}

​ 逻辑相关 {%%}



​ 1.过滤器

​ |length

​ |default

​ |add

​ |date

​ |filesizeformat

​ |slice

​ |truncatewords

​ |truncatechars

​ |safe



2.标签

{% if aaa %}

{% elif %}

{% else %}

{% endif %}



​ {% for %}

​ {{ forloop }}

​ {% endfor %}



{% with %}

{% endwith %}

  1. 3.自定义过滤器及标签
  2. 1.在应用中要键一个名字必须叫templatetags
  3. 2.任意名称的py文件
  4. 3.固定写两行代码
  5. from django.template import Library
  6. register = Library()
  7. @register.filter



​ @register.simple_tag



​ 4.模板的继承与导入

​ 继承

​ 模板中需要提前划定号区域

​ {% block '名字' %}

​ 模板内容

​ {% endblock %}

​ 子板中使用

​ {% extends '模板的名字'%}

​ {% block '名字' %}

​ 子板内容

​ {{ super.block }}

​ {{ super.block }}

​ {{ super.block }}

​ {% endblock %}



​ 模板的导入

​ {% include '模板名' %} # 类似于导入模



模型层

查询语句

  1. 单表的查询
  2. 类名.objects.
  3. 必知必会13
  4. all()
  5. filter()
  6. get()
  7. values()
  8. values_list()
  9. first()
  10. last()
  11. order_by()
  12. reverse()
  13. count()
  14. exists()
  15. distinct()
  16. exclude()
  17. 神奇的双下划线
  18. price__lt
  19. __gt
  20. __lte
  21. __gte
  22. __in
  23. __range
  24. title__startswith
  25. __endswith
  26. __contains
  27. __icontains(******)
  28. create_time__year
  29. __month
  30. 外键字段的增删改查
  31. 一对多
  32. create(publish=publish_obj)
  33. create(publish_id=1)
  34. # 默认是级联更新 级联删除
  35. 多对多
  36. add()
  37. add(1)
  38. add(1,2)
  39. add(author_obj)
  40. add(author_obj,author_obj1)
  41. remove()
  42. # 同理
  43. set()
  44. set([1,])
  45. set([1,2])
  46. set([author_obj,])
  47. set([author_obj,author_obj1])
  48. clear()
  49. 跨表查询
  50. 正向查询按字段
  51. 反向查询按表名小写
  52. 基于对象的(子查询)
  53. 1.先获取一个对象
  54. 2.利用对象点点
  55. book_obj.publish.name
  56. book_obj.authors.all()
  57. author_obj.author_detail.phone
  58. publish_obj.book_set.all()
  59. author_obj.book_set.all()
  60. author_detail_obj.author.name
  61. 基于双下滑线(连表查询)
  62. models.Book.objects.filter(pk=1).values('publish__name')
  63. models.Book.objects.filter(pk=1).values('authors__name')
  64. models.Book.objects.filter(pk=1).values('authors__author_detail__phone')
  65. models.Publish.objects.filter(book__pk=1).values('name')
  66. 聚合查询
  67. 关键字 aggregate
  68. from django.db.models import Avg, Max, Min, Sum, Count
  69. 分组查询
  70. 关键字 annotate
  71. 参考博客练习题
  72. FQ查询
  73. F 能够获取表中的某个字段对应的数据
  74. 库存数大于卖出数的书
  75. Q 能够改变查询条件
  76. filter(**kwargs)
  77. filter(Q(xxx='yyy')|Q(yyy='ooo'))
  78. filter(~Q(xxx='ooo'))
  79. ps:
  80. q = Q()
  81. q.connector = 'or'
  82. q.children.append('xxx','ooo')
  83. q.children.append('yyy','zzz')
  84. filter(q)

django与ajax

​ 前后端传输数据的编码格式

​ urlencoded

​ username=jason&age=18

​ formdata



application/json

{"username":"jason"}

  1. form表单



​ ajax(******)

​ ajax基本语法

​ $.ajax({

​ url:'',

​ type:'post',

​ data:{'name':'jason'}

​ success:function(data){

​ alert(data)

​ }

​ })

​ ajax提交json格式

​ data必须是json格式的数据

​ contentType需要指定成application/json

​ ajax提交文件格式

​ data直接写formdata对象

​ 还需要指定两个参数为flase

​ contentType

​ processData



​ cookie与session

  1. 中间件



​ class User:

​ username

​ password



1 jason 123

2 egon 123

3 tank 123

4 oscar 123

  1. class Permission:
  2. title
  3. url
  4. 1 查看用户 check_user/
  5. 2 增加用户 add_user/
  6. 3 编辑用户 edit_user/(\d+)/
  7. 4 删除用户 delete_user/(\d+)/
  8. ...
  9. class User2Permission
  10. user
  11. permission
  12. 1 1 1
  13. 2 1 2
  14. 3 1 3



​ RBAC 基于角色的权限管理()



class User:

username

password

  1. 1 jason 123
  2. 2 egon 123
  3. 3 tank 123
  4. 4 oscar 123
  5. class Role:
  6. title
  7. 1 保安队长
  8. 2 保洁阿姨
  9. 3 CEO
  10. 4 管理员



​ class Permission:

​ title

​ url

​ 1 查看用户 check_user/

​ 2 增加用户 add_user/

​ 3 编辑用户 edit_user/(\d+)/

​ 4 删除用户 delete_user/(\d+)/

​ ...



​ class User2Role

​ user

​ role

​ 1 1 3

​ 2 2 2

​ 3 3 1

​ 4 4 2



​ class Role2Permission

​ role

​ permission

​ 1 3 1

​ 2 3 2

​ 3 3 3

​ 4 3 4

  1. 白名
  2. 黑名单

bbs系统的相关知识点的更多相关文章

  1. UITableView相关知识点

    //*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...

  2. Android开发涉及有点概念&相关知识点(待写)

    前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...

  3. IOS开发涉及有点概念&相关知识点

    前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...

  4. Python开发一个csv比较功能相关知识点汇总及demo

    Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...

  5. MySQL自增列(AUTO_INCREMENT)相关知识点总结

      MySQL的自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎.不同版本也有一些不同的特性),让人感觉有点稍微复杂.下面我们从一些测试开始,来认识 ...

  6. sql注入原理+mysql相关知识点

    什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...

  7. IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结

    添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...

  8. 学习记录013-NFS相关知识点

    一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...

  9. TCP/IP 相关知识点与面试题集

    第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...

随机推荐

  1. VScode usage

    Common settings editor.minimap.enabled     //close the preview workbench.editor.show tabs  // show f ...

  2. Python中pip的使用

    1.pip安装模块 pip install 模块名称 -i 安装源 pip install requests -i https://mirrors.aliyun.com/pypi/simple/

  3. 解决:java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlObject报错问题。

    利用POI操作PPT一直报如下错误java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlObject 是因为项目中缺少一个包xmlbeans ...

  4. Bootstrap Table Api手册

    总是忘记在哪里,找起来又十分的费劲,特地记录下该手册地址. http://www.itxst.com/Bootstrap-Table/QuickStart.html

  5. vue学习指南:第十四篇(详细) - Vue的 路由 第四篇 ( 路由的导航守卫 )

    导航守卫 一.全局导航守卫 1. 全局导航守卫,把方法给 router,只要路由发生改变跳转都会触发这个函数 2. 每个路由 都有一个 meta 3. 全局导航守卫分两种: 1. 全局前置导航守卫:路 ...

  6. 查询linux版本信息

    uname -a (Linux查看版本当前操作系统内核信息) cat /proc/version (Linux查看当前操作系统版本信息) cat /etc/redhat-release (Linux查 ...

  7. 《深入理解Java虚拟机》读书笔记七

    第八章 虚拟机字节码执行引擎 1.运行时栈帧结构 概述: 栈帧是用于支持虚拟机进行方法调用的和方法执行的数据结构,他是虚拟机运行时数据区中的虚拟机栈的栈元素,栈帧存储了方法的局部变量,操作数栈,动态连 ...

  8. Js 事件委托 解决动态元素不能click点击的问题

    参考教程地址 https://blog.csdn.net/xiaolong20081/article/details/79792137 不想写了.直接看上面就行 采用事件委托或代理方式绑定 $(doc ...

  9. 剑指offer 面试题43. 1~n整数中1出现的次数

    leetcode上也见过一样的题,当时不会做 看了一下解法是纯数学解法就没看,结果剑指offer上也出现了这道题,那还是认真看下吧 对于数字abcde,如果第一位是1,比如12345,即计算f(123 ...

  10. [C语言学习笔记四]变量与系统的交互

    使用 const 创建常量和使用 volatie 优化变量 C语言中使用 const 定义常量. 例如: const INT a = 10; 此处如果添加a = 20;,编辑器则会报错,因为此处 a ...