栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django 常用技术

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django 常用技术

1.静态处理

    下面通过一个简要案例来了解静态文件的基本使用。

    首先,在webtest/settings.py文件中定义静态文件存放的物理目录;

# 静态资源的访问路径
STATIC_URL = '/static/'
# 配置静态资源的放置目录
STATICFILES_DIRS = [os.path.join(base_DIR,"static"),]

    接着在项目根目录下创建static目录,再创建images、css、js目录,并在images中保存一张照片;

                                                

     在book/views.py文件中定义test_static()视图函数并配置url;

def test_static(request):
    return render(request,'book/test_static.html')
    url(r"^test_static",test_static),

    在templates/book下创建test_static.html文件;




    
    Title
    
    {% load static from staticfiles %}
    


首页




    效果如下:

                           

2.上传图片

    在上传图片之前,先在book/models.py中创建一个包含图片的模型类PostImg,并将模型类的一个属性值定义为models.ImageField类型;

class PostImg(models.Model):
    picture = models.ImageField(upload_to='avatar')

    def __str__(self):
        return self.picture

    class meta:
        verbose_name_plural = "上传图片"

    接着生成迁移文件并生成相应的数据表;

python manage.py makemigrations

python manage.py migrate

    打开webtest/settings.py文件,设置图片保存路径(因为是静态文件,所以保存在static目录下);

# 对于用户上传的资源
# 访问上传资源的路径
MEDIA_URL = "/media/"
# 存储上传资源的路径
MEDIA_ROOT = os.path.join(base_DIR,"static/media")

    在static目录下创建media目录,再创建应用名称的目录;

                           

    在Django中上传图片包括两种方式,分别是:在后台管理页面中上传图片、在自定义form表单中上传图片;

(1)后台管理上传图片

         首先,打开book/admin.py文件,进行注册;

class PostImgAdmin(admin.ModelAdmin):
    list_display = ['id', 'picture']

# 注册
admin.site.register(PostImg,PostImgAdmin)

          打开浏览器运行后,添加图片并保持,这时可查到表中的数据,且图片被保存在目录static/media/avatar下;

              

(2)自定义form表单上传图片

         打开book/views.py文件,创建test_upload()视图函数并配置url;

def test_upload(request):
    if request.method == 'GET':
        return render(request,'book/test_upload.html')
    else:
        # imgObj = request.FILES.get('avatar')  -- 图片对象
        # imgObj.name  获取图片的原始名字
        # imgObj.file  获取图片的二进制代码
        imgObj = request.FILES.get('avatar')
        fname = os.path.join(settings.MEDIA_ROOT,imgObj.name)

        with open(fname,'wb') as rfile:
            data = imgObj.file.read()
            rfile.write(data)
        return HttpResponse("ok")
    url(r"^test_upload",test_upload),

         在templates/book目录下创建模板test_upload.html;




    
    自定义表单上传图片


{% csrf_token %}

         效果如下:

           

3.分页处理

    首先,打开book/views.py文件,创建show_books()视图函数并配置url;

def show_books(request,pageIdx):
    # 查询出所有的满足条件的数据
    bookslist = BookInfo.objects.filter(is_delete = 0)
    # 使用Paginator对查询出的数据做分页处理
    paginator = Paginator(bookslist,3)
    # 整理当前页的页码
    if pageIdx == "":
        pageIdx = 1
    pageIdx = int(pageIdx)
    # 通过Paginator创建出来的对象的page方法获取到当前也应该显示的图书信息
    pageObj = paginator.page(pageIdx)
    # 还需要知道页码列表
    codelist = paginator.page_range
    return render(request,'book/show_books.html',
                  {'pageIdx':pageIdx,
                   'pageObj':pageObj,
                   'codelist':codelist,
                   'total':paginator.count,
                   'totalPage':paginator.num_pages
                   })
    url(r"^show_books/(d+)",show_books),

    接着,创建模板show_books.html;




    
    分页显示数据


    
        {% for book in pageObj.object_list %}
            
        {% endfor %}
        
编号 书名 总页数
{{ book.id }} {{ book.bname }} {{ book.bpage }}
{% if pageObj.has_previous %} { pageObj.previous_page_number }}">上一页 {% else %} 上一页 {% endif %} {% for code in codelist %} {% if pageIdx == code %} {{ code }} {% else %} { code }}">{{ code }} {% endif %} {% endfor %} {% if pageObj.has_next %} { pageObj.next_page_number }}">下一页 {% else %} 下一页 {% endif %}

    效果如下:

      

4.重写模板

    在book/templates/目录下创建admin目录,再从当前虚拟环境中的Django的目录下找到admin的模板,将其内容拷贝到上面创建好的admin目录里,这里以base_site.html为例;

                                            

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}

hihi{{ site_header|default:_('Django administration') }} {% endblock %} {% block nav-global %}{% endblock %}

     效果如下:

     

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/675121.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号