- 用户相关
- 创建用户
- User.objects.create_user(username=usernam………)
- create_user 会自动将密码进行加密
- 用户验证
- user = authenticate(username=username, password=password)
- 返回布尔类型的数据
- user = authenticate(username=username, password=password)
- 校验密码是否正确
- request.user.check_password(old_password)
- 修改密码并加密
- request.user.set_password(password)
- 首页展示用户名,3种方法
- 模板中request变量直接渲染用户名
- 缺点: 不方便做首页静态化
- 单独定义借口,发送ajax请求
- 缺点: 需要发送网络请求
- 使用cookie保存用户信息,前端访问cookie
- 优点: 减少网络访问,方便首页静态化
- 代码参考状态保持
- 模板中request变量直接渲染用户名
- 判断用户是否登录
- is_authenticate
- 很多地方都需要,该判断逻辑需要重复编码好多次
- login_required装饰器
- 已经封装了is_authenticate
- 配置中定义,用户未登录跳转的路径: LOGIN_URL=‘/login/’
- 用法:
- 直接路由中装饰as_view(),但是不好
- 重写as_view()
- 定义工具类文件utils.py
- 添加扩展类
- class LoginRequiredMixin(object):
- “”“验证用户是否登录的扩展类”""
- @classmethod
- def as_view(cls, **initkwargs):
-
# 调用父类的 as_view() 函数
-
view = super().as_view()
-
return login_required(view)
- 验证是否登录时,直接继承拓展类工具即可
- class UserInfo(LoginRequiredMixin,request)
- pass
- class UserInfo(LoginRequiredMixin,request)
- is_authenticate
- 创建用户
- 重定向
- return redirect(reverse(‘contents:index’))
- 状态保持
- login(request,user) # 自动保存到 session中,将sessionid保存到cookie中
- login()会自动将 session 保存到 cookie 中
- 设置 session的时效,request.session.set_expiry(0)
- 设置 cookie, response.set_cookie(‘username’,username) #为了前端获取用户名
- 前端获取 cookie
- logout(request) # 自动清理 session
- response = redirect.reverse(content:index)
- response.delete_cookie('username’) # 清楚cookie的信息
- return response
- 密码相关
- 设置 cookie
- HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
- 修改密码并对密码加密
- 设置 cookie
- 扩展类的写法
- def login_required_json(view)
- @wraps(view) # 恢复被装饰函数的文档和名字
- def wrapper(request)
- if request.user.is_authenticated():
- return http.JsonResponse({})
- else:
- return view()
- return view()
- if request.user.is_authenticated():
- return wrapper
- class LoginRequiredJsonMixin(object)
- @class method
- def as_view(cls)
- view = super().as_view()
- return login_request_json(view) # 使用 login_request_json 过滤 view
- def login_required_json(view)
- 过滤器
- wraps 装饰器
- 作用:恢复被装饰函数的文档和名字
- 启动 celery
- celery -A celery_tasks.main worker -l info
- models & 数据库
- 模型类相关
- 过滤查询 属性名称__比较运算符=值
- 查询运算符:exact contains startwith endswith isnull in 比较(gt gte it ite)
- 一到多的查询
- b = BookInfo.objects.get(id=1)
- b.heroinfo_set.all( ) # 多的模型类要小写
- 如果在hbook( 是HeroInfo中的外键,对应BookInfo)中加入外键heros,也可以写成
- b.heros.all( )
- 多到一的查询
- h = HeroInfo.objects.get(id=1)
- h.book # 查询书的名字
- 访问关联对象的id 语法 : h.hbook_id
- 关联过滤查询
- 多模型条件查询一模型类数据
- 查询图书,要求英雄为杨过
- BookInfo.objects.filter(heroinfo__hname=‘杨过’)
- 查询图书,要求英雄为杨过
- 一模型类条件查询多模型类数据:通过外键查找
- 查询天龙八部的所有英雄
- HeroInfo.objects.filter(hbook__btitle=‘天龙八部’)
- 查询天龙八部的所有英雄
- 111
- 11111
- 11111
- 多模型条件查询一模型类数据
- 外键
- 外键是指别的表的 id,会自动加上 “_id”
- 外键取别名
- relate_name=“subs"
- 起别名,代表外键的反向使用
- relate_name=“subs"
- 更新数据
- Address.objects.filter(id=address_id).update()
- request.user.default_address = id 为何会报错
- 创建数据
- address = Address.objects.create()
- 对结果添加过滤
- request.user.model.objects.filter(id=1).count()
- 模型类相关
- 缓存功能
- from django.core.cache import cache
- 设置缓存
- cache.set(‘province_list’,province,有效期)
- 获取缓存
- province = cache.get(‘province_list’)
- if not province:
- 再去数据库取值
- post接收 json格式数据
- json_dict = json.loads(request.body.decode())
- name = json_dict.get(‘name’)
- 分页器
- page_num = int(page_num) # 第几页,必须是整型
- try:
-
paginator = Paginator(orders, 2) # 商品列表,每页商品数
-
page_orders = paginator.page(page_num)
-
total_page = paginator.num_pages
- except EmptyPage:
-
return http.HttpResponseNotFound('订单不存在')
- Elasticsearch全文检索方案
- 在搜索之前,搜搜引擎提前检索数据库,建立起索引
- 搜索引擎对数据构建索引时,需要进行分词处理,将一句户拆解成多个单词或词,这个词就是这句话的关键
- 事物
- with transaction.atomic()
- save_id = transaction.savepoint( )
- try:
- ……
- Exception:
- transaction.savepoint_rollback(save_point)
- transaction.savepoint_commit(save_id)
- with transaction.atomic()
Django项目方法 工具类总结(完善中)
最新推荐文章于 2022-04-23 11:09:24 发布