标签归档:Django

Pycharm+Django 安装及配置指南

虽然平时我极力推荐使用简单、轻便、灵活的VSCode编辑器进行开发。

但是对于大型Web项目(Django、Tornado等框架)开发,我还是推荐大家使用Pycharm.

Pycharm拥有强大的配置工具、Git版本管理工具、代码补全工具、Debug工具等等,这些都是进行大型项目开发的利器。

尤其是今天的主角Django,由于太过于重要了,Pycharm甚至专门给其提供了配置模板:

能直接在新建项目的时候选择Django并新建一个独立的虚拟环境:

从新建到编码测试,一套流程用起来都极其方便。

1.下载Pycharm

在jetbrains官网选择相应的系统下载Pycharm:
https://www.jetbrains.com/pycharm/download/

这里强烈推荐下载Professional版(专业版),激活方法可以自行在网上查询,推荐知了哥的文章(zhile.io)。

安装完成后,根据你是否需要新建Django项目分为两种配置方式。

1.1 新建Django项目

File-New Project 新建一个Django项目:

强烈推荐新建一个环境,默认新建环境的工具是Virtualenv, 我这里用的是conda,效果其实都差不多。区别在于,conda可以选择Python版本

输入好location(安装位置)后点击create,即可生成Django项目。

1.2 配置已开发的Django项目

Pycharm中适配已开发的Django项目也非常容易,因为它为这种情况专门提供了配置模板:

点击右上角的配置框选择 Edit Configurations

进来后先输入Name 项目名称,然后在Python Interpreter选择你的代码所属环境的编译器,最后选择Fix,弹出Django配置页。

在点击Fix后出现的配置页中,输入这三项:

第一个是项目根目录,第二个是settings.py文件的位置,第三个是manage.py的位置。三者缺一不可。搞定后点击OK,配置完成。

2.运行项目

Pycharm运行Django项目只需要点击右上角这两者之一即可:

第一个是普通的启动方式,第二个是Debug启动方式,推荐第二个,因为开发的时候如果需要跟踪代码流程,Debug模式非常方便。

点击后会自动生成启动Django的命令,你可以在console里查看该语句,出现以下的输出即启动完成:

访问http://127.0.0.1:8000/就是网站的首页了。

这里默认使用的端口号是8000,你可以在配置页修改默认的域名和端口,只不过其他域名你需要在hosts中将其定向到127.0.0.1, 比如:

修改hosts文件,增加:dev.goldenstone.com 127.0.0.1

保存后修改右上角的configurations配置:

在settings.py中,将dev.goldenstone.com这个域名加入到 ALLOWED_HOSTS 中:

这样就可以通过 http://dev.goldenstone.com:5555/ 访问你的开发环境了:

3.工具

下面介绍一些Pycharm中独有的、特别的工具:

3.1 查看文件历史修改及提交记录非常方便:

点击每一个提交,都能看到每次提交的内容。

3.2 选择指定的commit行

VCS-Commit,它可以自由选择你需要提交的代码块:

3.3 自动格式化代码

3.4 全局搜索

尽管VSCode也有全局搜索,但相信我,他们两个不是一个概念:

windows下选择 Ctrl+shift+F 即可在Pycharm中全局搜索,或者在Edit-Find-Find in Path 找到该功能:

界面如下,它不仅仅是全局搜索,还能指定模块、目录进行搜索。

指定文件名搜索,高级过滤器中还能搜索指定除注释以外的符合关键词的句子等等,是一个非常强大的搜索工具。

这个搜索工具对于我而言,使用频率仅次于Debug工具。


Pycharm中非常有用的生产工具还有很多,简直是用都用不完,下次再给大家详细介绍一番!

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Django-oscar 快速搭建商城网站

Django是一个相对容易学习的框架,并且已经发展了许多年,拥有相对活跃的开源环境。像豆瓣、Instagram,Spotify,YouTube等官方网站都是基于Django搭建的,今天我们来学着用它搭建一个商城网站。

Python实用宝典 曾经发表过Django的实战教程:

Python Django快速开发音乐高潮提取网(1)

Python Django快速开发音乐高潮提取网(2)

Python Django快速开发音乐高潮提取网(3)

不过,这三篇文章是基于原生Django开发的。

今天我们来尝试使用他人搭建好的框架 Django-oscar,开发一个商城网站。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始第2步操作。

当然,我更推荐大家用VSCode编辑器,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

2.构建虚拟环境

为了防止不同环境下的Python包互相影响,在开始之前你应该先构建虚拟环境:

使用conda:

conda create -n mywebsite python=3.6

或使用virtualenv:

virtualenv --no-site-packages mywebsite 

如果是使用conda创建的虚拟环境,这样进入虚拟环境中:

Windows:

activate mywebsite 

Mac/Linux:

source activate mywebsite

使用virtualenv的话,一般虚拟环境会被安装到命令当前的目录下,使用以下方式进入虚拟环境:

Windows:

source mywebsite/scripts/activate

Mac/Linux:

source mywebsite/bin/activate 

最后,在终端输入以下命令安装我们所需要的依赖模块:

pip install django-oscar

看到 Successfully installed xxx 则说明安装成功,注意这里并不需要先安装Django, 因为Django-oscar中附有依赖的Django版本。

3.安装项目

成功安装依赖后,运行以下命令安装Django项目,我起名为easyshop:

django-admin startproject easyshop

然后进入项目中:

cd easyshop

编辑easyshop.easyshop.settings.py文件,将以下代码复制到settings.py的顶部

from oscar.defaults import *
from oscar import INSTALLED_APPS as OSCAR_APPS
# Path helper
location = lambda x: os.path.join(os.path.dirname(os.path.realpath(__file__)), x)

然后修改TEMPLATES变量以添加模板配置:

TEMPLATES = [
    {
        'BACKEND':'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
            OSCAR_MAIN_TEMPLATE_DIR
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.i18n',
                'django.contrib.messages.context_processors.messages',
                'oscar.apps.search.context_processors.search_form',
                'oscar.apps.checkout.context_processors.checkout',
                'oscar.apps.customer.notifications.context_processors.notifications',
                'oscar.core.context_processors.metadata',
            ],
        },
    },
]

然后在INSTALLED_APPS变量中添加:

django.contrib.sites
django.contrib.flatpages
widget_tweaks

并增加一个SITE_ID变量以便oscar框架识别:

# 此处可能会有重复,因此转化一遍
INSTALLED_APPS = list(set([
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django.contrib.flatpages',
    'widget_tweaks',
] + OSCAR_APPS))

SITE_ID = 1

再添加两个中间件到中间件MIDDLEWARE变量:

'oscar.apps.basket.middleware.BasketMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',

最后添加身份验证和搜索引擎:

AUTHENTICATION_BACKENDS = (
    'oscar.apps.customer.auth_backends.EmailBackend',
    'django.contrib.auth.backends.ModelBackend',
)
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.simple_backend.SimpleEngine',
    },
}

4.项目运行

为了能正常访问oscar框架提供的后台,还需要配置一下 easyshop.easyshop.urls.py 文件:

from django.apps import apps
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(apps.get_app_config('oscar').urls[0])),
]

执行以下命令来运行项目:

python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

然后访问网址:http://127.0.0.1:8000/dashboard/

会出现一个用户登录框,输入刚createsuperuser时创建的超管用户即可:

进去后,就是网站的后台了:

这个框架给定的功能其实蛮全的,但对于我们中文站来说,你还需要做翻译,因为实质上该框架的国际化并不是很完善。

此外还需要补充微信支付和支付宝支付,这两个需要有商家权限才能开通。你可以从微信的官方SDK中导入相应代码,并结合到框架中。

总而言之,这是一个很不错的Django商城项目,有兴趣的话可以拿它来开发一个简单的商城。更多功能请关注官方文档:

https://django-oscar.readthedocs.io/en/latest/internals/getting_started.html

我们的文章到此就结束啦,如果你喜欢我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python Django快速开发音乐高潮提取网(2)

上次第一部分我们用Django搭建了一个简易的文件上传网站,今天让我们来完善这个网站,增加一些细节部分的调整,并加入音乐高潮提取的API.

如果你还没有阅读过第一部分,建议先从第一部分开始阅读哦:Python Django快速开发音乐高潮提取网(1)

本文完整源代码,请在后台回复:音乐高潮提取网 获取

1.文件校验

首先,为了安全起见,同时也为了减小服务器的压力,我们必须确认用户上传的文件是正确的。因此需要在views.py接收用户请求时,对用户上传的文件判断格式和大小。

在上篇文章中,我们使用了 forms 类生成表单,后端使用 request.FILES[‘docfile’] 获得了文件,这个对象具备什么属性呢?能不能让我们获得文件的大小和格式呢?

在一番搜索后,我终于找到了它的属性,这是一个叫做UploadedFile的类文件对象,具备以下属性:

详细文档:https://docs.djangoproject.com/en/3.0/ref/files/uploads/

通过size属性能获得bytes单位的文件大小,通过content_type可以获得文件属性,太好了,接下来就可以编写我们的校验代码:

这里我们限定了文件大小为10M (从bytes到MB的计算方法:1024*1024*10 ) ,上传文件的格式限定为wav和mp3. 将这个函数用于校验,如图所示:

好了,现在你再试一下上传图片,会发现什么反应都没有,上传mp3格式的音乐会返回上传成功的提示。

2.提取音乐的高潮部分

这一部分其实很简单,不过如果你还没看过音乐的高潮部分提取的文章,建议阅读:Python 音乐高潮提取

首先,引入我们所需要的包(安装方法在Python Django快速开发音乐高潮提取网(1)) :

from pychorus import find_and_output_chorus 

然后要拿到音乐文件的路径,才能过进行音乐提取,还记得我们在上节的教程中,其实是用了一个模型来上传文件的吗:

现在这个模型派上用场了。我们仅需要在文件对象保存之后,通过“对象.file.path ” 的属性就能获得文件的绝对路径。

ilePath = newdoc.file.path 

不过,我们还需要设定音乐高潮部分提取完成后的输出位置,我的设定方法是在同目录下保存一个后缀为_high的文件:

不过要注意的是,由于该模块用到了一个名为SoundFile的包,这个包在输出文件的时候仅支持以下格式,为了方便处理,我们默认输出格式为wav.

3.返回音乐高潮部分给用户

接下来要返回提取完成的音乐高潮部分的文件,我们希望将文件作为附件给用户下载,让用户自行选择软件播放音乐,而不是在网站上直接收听音乐。

Django能非常容易地实现这一点:

将文件以二进制的形式打开,然后作为HttpResponse返回,设定 content_type 和 Content_Disposition 即可。

好了,再次运行项目:python manage.py runserver 上传一个音乐试一下:

https://pythondict-1252734158.file.myqcloud.com/home/www/pythondict/wp-content/uploads/2019/12/2019121315094465.wav

这样,我们就能成功地完成用户上传——提取音乐高潮——返回用户下载的逻辑了。不过还有一些细节需要改进:

1.前端太丑了,能不能改进一下?
2.用户上传文件错误时没有提醒。
3.能不能多加点功能,比如其他用户的音乐分享?

下一次教程,我们就来完整地完成这个网站并上线!关注下方公众号,后台回复  音乐高潮提取网  获得本文全部源代码!

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!

音乐相关教程:

Python 批量下载网易云音乐歌单

Python 制作音乐高潮副歌提取器

Python Django快速开发音乐高潮提取网(1)

Python Django快速开发音乐高潮提取网(2)

Python Django快速开发音乐高潮提取网(3)

Python 超方便超快速剪辑音乐

Python 提取音乐频谱并可视化


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python Django快速开发音乐高潮提取网(1)

还记得我们上次做的一个高潮提取器吗:Python制作音乐高潮提取器。今天我们来把这个高潮提取器做成一个网站,让许多不懂技术的人也可以很方便地提取歌曲里的高潮/副歌部分。

其实这是一个非常简单的单页面网站,不需要数据、不需要celery、不需要各种高深的后端技术。不过,如果适当地利用一些Python的Web开发框架,我们能更快地完成这个网站的开发,也能够顺便带大家入门一下Web开发框架。

因此我们将用Django来完成这个网站。不过由于我不想让文章篇幅变得冗长,我们将分为两部分来讲解,第一部分是建造一个简单的支持文件上传的网站,第二部分将基于第一部分完善文件上传功能,建造一个音乐高潮提取网。

1.准备

在开始之前,你需要先安装好Python,如果还没有安装Python,请看这篇文章:超详细安装Python指南

打开CMD(windows)/Terminal(macos),下文统一称这两者为终端,输入安装Django的命令:

pip install Django

看到终端结果显示类似如下则说明安装成功。

安装高潮提取器需要用到的项目:

pip install pychorus

2.新建Django项目

在你希望放置项目文件的目录下打开终端,输入以下命令:

django-admin startproject yinyue30

如果遇到 未找到命令 Django-admin 这样的错误,则说明你需要配置Django的环境变量,详细可以看这篇文章的windows Django安装:

https://www.runoob.com/django/django-install.html

这个命令会新建一个Django项目,目录结构如下:

3.Django应用开发

新建了Django项目后,我们就可以开始应用开发了。使用终端在生成的yinyue30文件夹中,输入以下命令新建“extractor(提取器)”应用:

python manage.py startapp extractor

到这里,应用初始化就算正式完成了。让我们看一下现在的文件结构:

看起来有点复杂,但是不要紧,我们只需要管其中几个文件即可。在我们开始正式编写代码前,我想先解释一下Django的设计模式。

3.1 Django设计模式简析( 你可以跳过这一部分)

传统的网站设计模型是MVC模型,即:

M 代表模型(Model):负责对象和数据的关系(ORM)。
V 代表视图 (View):负责如何把页面展示给用户(html)。
C 代表控制器(Controller):负责转发请求,处理请求等。

实质上Django也是类似的模型,不过有些许不同。Django更像是一个MVT模型,其中Controller的功能,被分担到了View和url转发器中。

在今天的教程中,我们重点关注的对象是View和Url转发器。

3.3 模型设计—编写models.py

尽管我们这个单页面应用可以不用到模型,但是使用模型能够帮助我们简化不少流程。而且代码非常简单:

文件将会被上传到“media/当前日期/ ” 的文件夹下,而且是和manage.py同级。如图所示:

之所以用Django自带的文件模型,不仅仅是因为这点方便,它还支持文件同名处理,当两个用户上传了相同文件名的文件时,第二个文件会被加一串md5作为区别。

除此之外,它还能限定文件上传的大小,具备用API作为代理访问基础文件等诸多方便的功能,如果你想了解更多的细节,可以阅读官方文档: https://docs.djangoproject.com/zh-hans/3.0/ref/models/fields/

3.4 视图设计—编写views.py

在views.py我们主要做以下几个事情:

1.渲染前端页面,允许用户提交文件。
2.获得用户请求时发送的文件。
3.对用户请求的文件进行音乐高潮提取。
4.提取完后返回音乐的高潮部分给用户。

其中,后端要校验文件大小(前端校验的话容易被绕过),然后提取音乐高潮的时候前端应该有“处理中 ” 的提示,等待提取完成返回结果后,前端直接显示下载按钮。

我们先来制作允许用户提交文件这一部分。

3.4.1 编写forms表单

Django有个我特别喜欢的特性:通过Form类能生成HTML代码,如果是做简单的页面开发,不需要用到前后端分离的情况下, 这点实在非常方便:

在extractor文件夹下新建一个forms.py的文件,写入以下代码:

接下来,在在extractor文件夹下新建templates文件夹,并在里面新建一个index.html 编写前端代码,将表单引入进来:

可以注意到,我们直接将表单以 {{ form.docfile }} 的形式引入进来生成前端表单,与此同时, {{ form.docfile.label_tag }} 可以直接将我们在类中定义的属性引入进前端。还有一点需要注意的是 {% csrf_token %},这是在Django表单中必带的,它会在请求中注入一段token,以防止跨站攻击。

3.4.2 编写views主逻辑

接下来,我们就来编写views的主逻辑,让它接受文件上传的POST请求并渲染前端页面:

它主要做这么几件事:

一是判断这个请求是否为POST请求,若是POST请求则进入文件上传保存的逻辑,判断用户上传的表单是否符合要求,若符合要求则保存文档,并返回HTTP回应:“上传成功!”。

二、如果不是POST请求,则说明是普通的访问,那么将生成一个空表单,渲染这个表单页面到前端,供用户提交文档。

3.5 配置路由

准备就绪了,接下来只要让我们把路由接上、再做一点简单的配置就能成功启动应用:

在extractor下新建一个urls.py文件,它将存放extractor即我们的提取器应用的所有路由(尽管我们就一个页面),配置如下:

它将能将直接访问域名的请求转发到views中的index函数,也就是我们刚在views.py中编写的主逻辑。不过这个是应用的路由,我们还需要修改Django项目的主路由:

将yinyue30文件夹下的 urls.py 修改如下:

这里需要在Django中引入include函数,然后在urlpatterns中,将所有直接指向域名的请求转发给我们刚刚编写的extractor的路由(extractor/urls.py),这样就大功告成了!

3.6 配置和迁移

我们刚刚编写了一个简单的extractor应用,由于Django对APP是有着即插即用的特点,因此我们需要将这个应用“插入”到Django中。

插入的方法也很简单,打开yinyue30文件夹下的settings.py, 在 INSTALLED_APPS 数组中加入 ‘extractor.apps.ExtractorConfig’ 。

最后一步,Django中有许多自带功能需要用到数据和表,还有我们刚刚新建的文件模型也需要用到数据,因此得新建我们所需要的东西,所幸,Django本身自带了迁移功能,而且默认使用的是sqlite,这方便了我们这个简单应用的开发,因为我们甚至不需要去配置mysql,直接迁移。

在根目录(与manage.py同级)运行以下命令即可迁移完成:
python manage.py makemigrations
python manage.py migrate

第一句是生成迁移表,其实就是一些sql语句组成的文件。第二句是执行sql操作,即完成迁移功能。

4. 运行项目

接下来我们就能让项目跑起来了, 在根目录(与manage.py同级)运行以下命令运行程序:

python manage.py runserver

运行后访问http://127.0.0.1:8000效果如下:

尝试上传, 上传成功 :

顺便检查下是否真的传入,发现有文件在media下,放心了:

那么我们第一部分的任务就算顺利完成了!下一部分,我们将正式将音乐高潮提取器的部分加上去。 敬请期待! 关注下方公众号,后台回复 音乐高潮提取网 获得项目第一部分源代码!

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!

音乐相关教程:

Python 批量下载网易云音乐歌单

Python 制作音乐高潮副歌提取器

Python Django快速开发音乐高潮提取网(1)

Python Django快速开发音乐高潮提取网(2)

Python Django快速开发音乐高潮提取网(3)

Python 超方便超快速剪辑音乐

Python 提取音乐频谱并可视化


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典