VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • python商城项目总结

项目概括

  本项目用于针对Django框架的练习,主要分为前端和后端两部分。前端负责用户注册、登录、商品展示以及添加购物车和显示订单列表的功能;后端负责会员信息、商品类别、商品信息的增删改查以及订单状态修改。

 

知识点总结

   一、Ajax(异步发送请求给后台)

  

复制代码
// 参数以键值对的形式
$.ajax({
    "type": "post"; //请求的方式,一般为post或者get
    "url":  "/test/" ;     //请求的地址
    "data": "{}" //携带参数,键值对,可以为空  
    "dataType":   "json"; //返回结果的类型
    success: function(data){
            //成功执行的方法 
} ;
    error: function(){
           //失败执行的方法
}

})
复制代码

 

  二、分页(导入django.core.paginator的Paginator包)

  

复制代码
from django.core.paginator import Paginator

def index(pindex):
     if pindex == "":
        pindex = 1
    user = Users.objects.all()
    # 传入需要分页的对象,和每页显示数据的条数
    p = Paginator(user,4)
    # 获取页码列表
    p_num = p.page_range
    # 返回第pindex页的实例
    pindex = int(pindex)
    page = p.page(pindex)  
    
    '''
    判断当前页是否有上一页:page.has_previous
    判断当前页是否有下一页:page.has_next
    获取上一页的页码:page.previous_page_number
    获取下一页的页码:page.next_page_number
    '''
复制代码

 

 

   三、密码以md5形式存储数据库

  

复制代码
import hashlib

# 实例化md5对象
md5 = hashlib.md5()
# md5.update()方法的参数必须是字节型数据
md5.update(bytes(request.POST['password'],encoding="UTF-8"))
# 以16进制格式存储
md5.hexdigest()

'''
这里有个坑必须注意:
md5.update()方法会将每次加密的字符进行拼接,所以每次加密前都要重新实例化一次md5实例
'''
import hashlib


md5=hashlib.md5()
md5.update('123'.encode('utf-8'))
print(md5.hexdigest())
# 输出结果:202cb962ac59075b964b07152d234b70
md5.update('123'.encode('utf-8'))
print(md5.hexdigest())
# 输出结果:4297f44b13955235245b2497399d7a93 //有没有发现 和上面对字符串“123”md5加密后的结果不一样

md5=hashlib.md5() //重新定义md5
md5.update('123123'.encode('utf-8'))
print(md5.hexdigest())
# 输出结果:4297f44b13955235245b2497399d7a93 //发现123123 和上面的结果一样 就验证了 md5.update 是拼接的效果
复制代码

 

 

  四、获取前台传输文件并写入到服务器

复制代码
import os
import time

def write_file(request):
    try:
        # 使用request.FILES得到上传的文件
        pic = request.FILES.get("picture_name")
        # 文件.name获取上传文件的名称
        # 截取后缀
        suffix = pic.name.split('.')[-1]
        if suffix.lower() in ['jpg','png']:
            # 格式化文件名
            file_name = str(time.strftime('%Y%m%d%H%M%S',time.localtime())) + '.' + suffix
            upload_path = 'myweb' + os.path.sep + file_name
            # 以二进制格式写入文件
            with open(upload_path,"wb+") as f:
                # chunks():当上传文件比较大时可以采用此方法,先读取一部分内容加载到内存,写入到服务器,然后清空内存;如此重复,可以节省内存空间
                 for file in pic.chunks():
                     f.write(file)
            context = {"info":"上传成功"}
        else:
            context = {"info":"上传格式有误!"}
    except:
        context = {"info":"请选择你要上传的图片!“}
    return render(request,"myweb/info.html",context)    
复制代码

 

 

  五、模板

    1.模板继承

    {% extends 'myweb/base.html' %}

    需要写在所有的前面,即模板的最顶端

    

    2.加载静态文件

    {% load static from staticfiles %}

    在settings.py文件中配置静态文件路径

    

STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR,'/static/ STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), ]

    

    3. 模板填充

    {% block myblock %}

    {% endblock %}

 

 

 

  六、创建虚拟环境

  每次开始一个新的项目最好新创建一个独立的虚拟环境运行,防止多个项目之间环境不兼容。

  • anaconda虚拟环境搭建
    • 查看所有虚拟环境列表

           conda env list

    • 切换虚拟环境

      conda activate my_env

    • 查看当前虚拟环境安装包

      conda list

    • 创建新的虚拟环境

      conda create -n env_name python=x.x

    • 安装django

      pip install django==x.x

    • 虚拟环境中安装额外的包

      conda install -n env_name [package]

    • 删除虚拟环境

      conda remove -n env_name --all

    • 删除虚拟环境中的某个包  

      conda remove --name $env_name $package_name

  



相关教程