电商练习项目笔记

1.设置模板路径
2.配置数据库文件
3,安装pymysql并在站点文件中配置
3.配置static静太文件,目录,路由
4.创建应用
5.创建对应的模型类
6.在配置文件中 安装应用
7.进行迁移
8.配置url,先在主url文件中配置,再在应用文件夹下添加url文件进行url添加
9.定义base模板文件,可以分开脚步,顶部
10.提交post表单 要使用csrf_token来关闭防止攻击
11.注册时的密码,用sha1加密,先编码再加密
==================================================
12.将验证是否登录的功能分离出来,做出装饰器,在所需要验证的视图函数上添加验证功能,如果登陆则返回原视图函数,若失败则跳转登录页面
====================================================
13.获取请求页面的完整url为:request.get_full_path(),返回带参数的url,
request.path()返回不带参数的url
====================================================

  1. url = request.COOKIES.get('url','/')#第二个参数为默认参数,如果url没有,则条首页
    =====================================================
    15.在模板文件中可以直接使用request
    {% if request.session.username|default:'' != '' %}
    *这里的 . 可以包括 字典的键,对象属性,方法,和索引的用法
    *default 过滤器可以设置默认值

=======================================================
16.清空所有session
request.session.flush()
======================================================
17.模板继承,大致分为 底部备案部分,头部用户条部分,这个构成主要base
=======================================================
18.图片字段
gpic = models.ImageField(upload_to='df_goods')

浮点型字段(总位数,和小数位数)
gprice = models.DecimalField(max_digits=5, decimal_places=2)

点击量字段
gclick = models.IntegerField()
=================================================
富文本编辑器
from tinymce.models import HTMLField
 gdetial = HTMLField()
 在setttings里面配置

==============================================

设置默认值

remember = post.get('remember',0)

======================================
19.设置cookie要用respose对象的set_cookie
response.set_cookie('uname',uname)
读取cokie用request['uname']

=======================================
20.request.Meta['key']
可以获得请求头的信息,如REFERERK可以获得来源地址,实现登录后跳回去
=======================================

当表单提交时触发的时间
$("form").submit(function(e){
alert("Submitted");
若 return true,则提交表单
若 return false 则不提交
});

================================================

  1. 获取 对应 列表中的通过 id 倒序排列的 前四个

    goods1 = type.goodinfo_set.order_by('-id')[0:4]
    ====================================================
    23.切片过滤器
    {{ goods.gtitle|slice:'10' }}
    ==================================================

  2. 创建paginator分页对象

    paginator = Paginator(good_list,10)

    返回Page对象

    page = paginator.page(int(pindex))
    ================================================
    25.商品列表页,需要传入三个参数,type,sort,和index
    根据sort 和 type来取出相应的商品列表
    ======================================
    26.遍历page对象即可获得 所需商品信息
    {% for goods in page %}
    ===========================================

  3. goods.gclick += 1 #点击量加1
    ======================================

  4. {{ goods.gdetial|safe }}显示html 需要 加safe 过滤器
    ==============================================
    29.js实现数量和价格的变化
    <script>
    function plus() {
    num = parseFloat($('.num_show').val());
    $('.num_show').val(num+1);
    $('.num_show').blur();

    }
    function minus() {
    num = parseFloat($('.num_show').val());
    $('.num_show').val(num-1);
    $('.num_show').blur();

    }
    $(function () {
    $('.num_show').blur(function () {
    num = parseFloat($('.num_show').val());
    price = parseFloat($('#gprice').text());
    total = num*price;
    $('#gtotal').text(total.toFixed(2)+'元')

    })
    

    })

</script>
===============================
30.将字符串拆分成列表
    goodidsl = goodids.split(',')

31.列表的count方法 可以统计 元素出现的次数
goodidsl.count(id)
remove方法可以删除对应的元素
goodidsl.remove(id)
字符串的join 方法,可以以当前字符串为分隔符,拼接一个列表
goodids = ','.join(goodidsl)#将列表,以逗号分割的形式 拼接为字符串

32.双下划线表示操作
GoodInfo.objects.filter(id__in=goodids)

33.#用户 与 商品的 联系 是多对多的

购物车 充当中间 环节,与 用户 一对多,同时 与 商品一对多

class Cart(models.Model):
user = models.ForeignKey('df_user.User') #与其他应用的模型类 关联 的写法
goods = models.ForeignKey('df_goods.GoodInfo')
count = models.IntegerField()

34.返回列表个数 的 过滤器
{{ good_list|length }}

35.判断 请求是否为ajax
if request.is_ajax():

36.通过ajax添加商品,只要返回商品数量即可
count = Cart.objects.filter(user_id=uid).count()
37.js中的跳转
location.href = ' www.hao123.com '
判断是否 有指定字符,indexof返回出现的位置,没有则返回-1
$('.login_btn fl').text().indexof('登录')>=0

38.返回json格式,参数为字典类型
JsonResponse({'count':count})

  1. 获取元素的 某一个属性的值prop()
    state=$(this).prop('checked');
    设置 属性的值
    $(':checkbox:not(#ckeck_all)').prop('checked',state)
    :后面表示所有的 这类元素,:not 表示除了这个元素

  2. $(function (){}) 表示文档加载完事相当于
    window.onload=function(){ //执行函数} 相当于
    $(document).ready(function(){ } )
    41.一个div的class用空格分开表示同时拥有两个 class
    <a href="javascript:;" class="add fl">+</a>
    用js获取的时候,只需要其中一个即可

  3. 获取当前元素所有父元素中。指定类的id属性的值
    id = $(this).parents('.cart_list_td').attr('id')
    43 .js如果用户点击确定按钮,则 confirm() 返回 true。如果点击取消按钮,则 confirm() 返回 false
    del = confirm('确定删除');

44.给链接 绑定js方法,模板传入参数
<a href="javascript:cart_del({{ cart.id }});">删除</a>
45.设置默认值为 当前时间
odate = models.DateTimeField(auto_now=True)

  1. js中的字符串 截取
    s=s.substring(0,s.length-1);

47.获取 get 请求中的 多个同名参数
cartids = request.GET.getlist('cart_id')
48.选中代码块 按table全部 右移 shift+table相反

  1. 模型类里 的 decmic类型 要转化成 floate 运算
    float(cart.count) * float(cart.goods.gprice)
    50.'''
    这些步骤中,任何一环节出错都不允许,要使用 事务 提交
    1. 创建订单对象
    2. 判断商品 库存 充足
    3. 创建 订单 详情 ,多个
      4, 修改 库存
    4. 删除购物车
      '''
      51.格式化字符串
      now.strftime('%Y%m%d%H%M%S')
  2. from decimal import Decimal
    =============================================
    53.django里事务的使用
    *引入包
    from django.db import transaction
    *在视图函数前 加装饰器
    @transaction.atomic()
    def order_handle(request):
    *埋点
    tran_id = transaction.savepoint()#保存点,回退到这里
    *回滚
    transaction.savepoint_rollback(tran_id)#会滚到点的位置

54.try 之后的else表示没发生异常
55.取小数点 后两位
float('%.2f' % a)
56.当前的页码
page.number
57.模板中的加法,减法过滤器
page.number|add:-1
实现乘法与除法
{% widthratio a b c %} === a/bc
{% widthratio 5 1 100 %} == 5/1
100 =5*100
{% widthratio 5 100 1 %} ==5/100

58.使用 全文检索

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容