bbs系统的相关知识点
1.注册功能
1.注册功能往往都会由很多校验性的需求 所以这里我们用到了forms组件
项目中可能有多个地方需要用到不同的forms组件 为了解耦合 但是创建一个py文件 专门用来存放项目用到的所有的forms组件
校验 用户名 密码 确认密码 邮箱
借助于钩子函数 校验用户名是否存在 密码与确认密码是否一致
2.创建路由 写视图函数
将实例化产生的forms类对象 利用模板语法传递到前端页面
再利用forms组件自动渲染前端获取用户输入的标签
3.用户输入数据后 采用ajax的方式朝后台提交数据
1.考虑到获取用户输入的input框可能会有很多 在同ajax获取的时候 可能会比较繁琐
借助了form标签有一个方法 自动将内部所有的普通键值 打包成一个容器类型
4.用户头像前端动态展示
利用内置对象 文件阅读器 new FileReader
等待什么什么加载完毕再执行 onload
window.onload
fileReader.onload = function(){
文件阅读器加载完毕之后 再执行的操作
}
5.针对ajax提交的数据 后端在返回信息的时候 通常都是一个字典
在创建数据的时候利用**直接打散字典的形式 传输数据
6.将错误的信息传递给前端
前端渲染错误信息的时候 遇到了一个问题 如何将对应的信息渲染到对应的input框下面的span标签中
研究forms组件渲染的input框的id值的特点 id_字段名
发现后端传过来的字典的key就是一个个的字段名 自己拼接处id值
2.登录功能
1.前端页面搭建
图片验证码
2.图片验证码
img标签 src可以接收的数据
1.图片的具体路径
2.图片的二进制数据
3.后端url(自动朝该url发送get请求)
3.后端代码推导
操作图片的模块pillow
4.完成后跳转到网站首页
展示网站所有的博客内容
django
django是什么
web框架 django是一款专门用来开发app的web框架
框架 就是类似于提前帮你搭建好整个项目的基础架构
纯手撸的web框架
统一接口
先砸钱 先让用户对你这个软件产生依赖 然后你再慢慢的抽血
共享单车
HTTP协议 >>> sql语句
为什么要有HTTP协议 一个服务端要服务N多个不同的客户端 如何保证数据的正常交互
为什么要有sql语句 一个服务端要服务N多个不同的客户端 如何保证数据的正常交互
web框架
django
flask
三行代码
tronado
自己去百度收一收
django版本问题
django == 1.11.11
requiretment.txt
django == 1.11.11
django == 1.11.11
django == 1.11.11
django == 1.11.11
django == 1.11.11
django == 1.11.11
django == 1.11.11
django == 1.11.11
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.路由匹配
url的第一个参数 是一个正则表达式
在匹配的时候 有一个特点 一旦匹配上了 会立刻停止匹配 执行路由对应的方法
2.无名分组(位置参数)
url(r'^index/(\d+)',view.index)
3.有名分组(关键字参数)
url(r'^index/(?P<year>\d+)',view.index)
4.反向解析
静态文件的配置
url(r'^index/',view.index,name='index') # 这个名字一定要是在整个django项目中唯一
{% url 'index' %}
reverse('index')
url(r'^index/(\d+)',view.index)
{% url 'index' 1 %}
reverse('index',args=(1,)) # 容器类型 哪怕只有一个元素 你也习惯性的加一个逗号
url(r'^index/(?P<year>\d+)',view.index)
{% url 'index' 1 %}
{% url 'index' year=1 %}
reverse('index',args=(1,)) # 容器类型 哪怕只有一个元素 你也习惯性的加一个逗号
reverse('index',kwargs={'year':1,}) # 容器类型 哪怕只有一个元素 你也习惯性的加一个逗号
5.路由分发(******)
include
url(r'^应用名1/',include('应用名1.urls'))
url(r'^应用名2/',include('应用名2.urls'))
6.名称空间
url(r'^应用名1/',include('应用名1.urls',namespace='应用名1'))
url(r'^应用名2/',include('应用名2.urls',namespace='应用名2')))
reverse('应用名1:别名')
reverse('应用名2:别名')
视图层
HttpResponse
render
redirect
JsonResponse
FBV与CBV
只要是视图函数 一般情况下都需要定义一个形参request
CBV的书写及内部原理
from django.views import View
class MyReg(View):
def get(self,request):
pass
url(r'^index/',MyReg.as_view())
# 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 %}
3.自定义过滤器及标签
1.在应用中要键一个名字必须叫templatetags
2.任意名称的py文件
3.固定写两行代码
from django.template import Library
register = Library()
@register.filter
@register.simple_tag
4.模板的继承与导入
继承
模板中需要提前划定号区域
{% block '名字' %}
模板内容
{% endblock %}
子板中使用
{% extends '模板的名字'%}
{% block '名字' %}
子板内容
{{ super.block }}
{{ super.block }}
{{ super.block }}
{% endblock %}
模板的导入
{% include '模板名' %} # 类似于导入模
模型层
查询语句
单表的查询
类名.objects.
必知必会13条
all()
filter()
get()
values()
values_list()
first()
last()
order_by()
reverse()
count()
exists()
distinct()
exclude()
神奇的双下划线
price__lt
__gt
__lte
__gte
__in
__range
title__startswith
__endswith
__contains
__icontains(******)
create_time__year
__month
外键字段的增删改查
一对多
create(publish=publish_obj)
create(publish_id=1)
# 默认是级联更新 级联删除
多对多
add()
add(1)
add(1,2)
add(author_obj)
add(author_obj,author_obj1)
remove()
# 同理
set()
set([1,])
set([1,2])
set([author_obj,])
set([author_obj,author_obj1])
clear()
跨表查询
正向查询按字段
反向查询按表名小写
基于对象的(子查询)
1.先获取一个对象
2.利用对象点点
book_obj.publish.name
book_obj.authors.all()
author_obj.author_detail.phone
publish_obj.book_set.all()
author_obj.book_set.all()
author_detail_obj.author.name
基于双下滑线(连表查询)
models.Book.objects.filter(pk=1).values('publish__name')
models.Book.objects.filter(pk=1).values('authors__name')
models.Book.objects.filter(pk=1).values('authors__author_detail__phone')
models.Publish.objects.filter(book__pk=1).values('name')
聚合查询
关键字 aggregate
from django.db.models import Avg, Max, Min, Sum, Count
分组查询
关键字 annotate
参考博客练习题
F与Q查询
F 能够获取表中的某个字段对应的数据
库存数大于卖出数的书
Q 能够改变查询条件
与 filter(**kwargs)
或 filter(Q(xxx='yyy')|Q(yyy='ooo'))
非 filter(~Q(xxx='ooo'))
ps:
q = Q()
q.connector = 'or'
q.children.append('xxx','ooo')
q.children.append('yyy','zzz')
filter(q)
django与ajax
前后端传输数据的编码格式
urlencoded
username=jason&age=18
formdata
application/json
{"username":"jason"}
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
中间件
class User:
username
password
1 jason 123
2 egon 123
3 tank 123
4 oscar 123
class Permission:
title
url
1 查看用户 check_user/
2 增加用户 add_user/
3 编辑用户 edit_user/(\d+)/
4 删除用户 delete_user/(\d+)/
...
class User2Permission
user
permission
1 1 1
2 1 2
3 1 3
RBAC 基于角色的权限管理()
class User:
username
password
1 jason 123
2 egon 123
3 tank 123
4 oscar 123
class Role:
title
1 保安队长
2 保洁阿姨
3 CEO
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
白名
黑名单
bbs系统的相关知识点的更多相关文章
- UITableView相关知识点
//*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- IOS开发涉及有点概念&相关知识点
前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...
- Python开发一个csv比较功能相关知识点汇总及demo
Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...
- MySQL自增列(AUTO_INCREMENT)相关知识点总结
MySQL的自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎.不同版本也有一些不同的特性),让人感觉有点稍微复杂.下面我们从一些测试开始,来认识 ...
- sql注入原理+mysql相关知识点
什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...
- IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结
添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...
- 学习记录013-NFS相关知识点
一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...
- TCP/IP 相关知识点与面试题集
第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...
随机推荐
- ctf-ping命令执行绕过
题目连接:http://ctf.klmyssn.com/challenges#Ping 命令执行绕过,试了试过滤了一些:一些命令 但是反引号可以执行命令 通过拼接,可以拼接出来:ls 命令 127.0 ...
- 前端:将网站打造成单页面应用SPA
前端:将网站打造成单页面应用SPA 前言 不知你有没有发现,像Github.百度.微博等这些大站,已经不再使用普通的a标签做跳转了.他们大多使用Ajax请求替代了a标签的默认跳转,然后使用HTML ...
- vue实现网页简单计算器实例代码
效果: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- Python-Django学习笔记(二)-创建一个Django项目与应用
1.创建一个Django项目 打开cmd命令行,设置好工作目录(cd 目录路径),然后输入 django-admin startproject projectname #必须安装好Django才可以执 ...
- 1米(m)=10分米(dm)=10^2厘米(cm)=10^3毫米(mm) =10^6微米(um)=10^9纳米(nm)=10^10埃米(A)=10^12皮米(pm)
millimeter 毫米 micrometer 微米 nanometer 纳米 square meter 平方米
- SSM+layui实现增删改查
前端使用layui框架,后端使用Spring+SpringMVC+Mybatis的集合框架,数据库使用MySQL,完成对一张用户表的增删改查操作. 前后端分离开发,即前端的HTML页面通过ajax技术 ...
- 初识消息队列--ActiveMq
消息队列 即MessageQueue,是一种消息中间件,在遇到系统请求量比较大的情况下,导致请求堆积过多无法及时返回,可以通过它进行异步的消息处理,从而缓解系统压力. ActiveMq ActiveM ...
- vue学习指南:第十四篇(详细) - Vue的 路由 第四篇 ( 路由的导航守卫 )
导航守卫 一.全局导航守卫 1. 全局导航守卫,把方法给 router,只要路由发生改变跳转都会触发这个函数 2. 每个路由 都有一个 meta 3. 全局导航守卫分两种: 1. 全局前置导航守卫:路 ...
- cookie和会话
一.为什么要使用cookie和会话 HTTP是一种无状态技术,这意味着每个单独的HTNML页面都是一个无关的.当人们穿过站点时,HTTP 没有用于跟踪用户或保持变量的方法,尽管浏览器会跟踪你访问过的页 ...
- rest_framework:解析器
一.解析器的作用 根据请求头content-type选择对应的解析器对请求体内容进行处理. 有application/json,x-www-form-urlencoded,form-data等格式 二 ...