pytharm搭建并运行你的第一个Django项目

创建并运行您的第一个Django项目

在开始之前

确保满足以下先决条件:

  • 您正在使用PyCharm 4.0.0或更高版本。如果您还没有PyCharm,请从此页面下载要安装PyCharm,请按照说明进行操作,具体取决于您的平台。
  • 您的计算机上至少安装了一个Python解释器。您可以从此页面下载口译员
  • 你已经安装了Django包。要了解如何使用PyCharm UI安装软件包,请阅读 安装,卸载和升级软件包一节您也可以按照如何安装Django页面中的说明安装Django

本教程已经创建了以下假设:

  • Python 3.4.1。
  • Django 1.8.0或更高版本。
  • 默认Windows键盘映射。
  • 本教程中使用的示例与Django文档中使用的示例类似 示例项目可以从这里下载

创建一个新的项目

实际上,所有新项目的创建方式都是相同的:通过单击欢迎屏幕快速启动区域中的创建新项目按钮

py_welcomeScreen

如果您有一个已经打开的项目,请通过选择File |来创建一个新项目 新建项目... 在主菜单上。

然后,选择所需的项目类型(这里是Django)。指定项目名称和位置,用于该项目的Python解释器(记住,至少有一个Python解释器是本教程的先决条件之一!)和应用程序名称(这里是轮询)。

py_choose_project_type

点击创建 - Django项目已经准备就绪。

探索项目结构

如上所述,基本上,存根项目已经准备就绪。它包含特定于框架的文件和目录。当您创建任何支持类型的项目时,也会发生同样的情况,无论是Pyramid还是Google App Engine。

让我们来看看在Project工具窗口中新建项目的结构是否可见

项目工具窗口的项目视图

该视图默认显示。它显示了Django特定的项目结构 pollsmysite目录; 另外,你可以看到 manage.pysettings.py文件。

请注意,您无法.idea在此视图中看到该目录:

py_project_view

项目工具窗口的“项目文件”视图

如果由于某些原因,您希望看到目录的内容.idea,请选择视图项目文件:如您所见,此视图显示相同的目录和文件以及.idea目录,因为它位于项目根目录下:

py_project_files_view

我们回到项目视图。

我们在项目视图中看到什么?

  • mysite目录是你的项目的容器。在项目视图中用粗体字表示。
  • manage.py:这是一个命令行工具,可以让你与你的Django项目进行交互。 有关详细信息,请参阅Django文档
  • 嵌套的目录mysite是您的项目的实际Python包。
  • mysite/_init_.py:这个空文件告诉Python这个目录应该被认为是一个Python包。
  • mysite/settings.py:这个文件包含 你的Django项目的配置
  • mysite/urls.py:这个文件包含你的Django项目的 URL声明
  • mysite/wsgi.py:该文件定义了WSGI兼容的Web服务器为您的项目提供服务的入口点。有关 更多详细信息,请参阅 如何使用WSGI进行部署
  • 嵌套目录polls包含开发Django应用程序所需的所有文件(目前这些文件是空的):
    • 再次polls/_init_.py告诉Python,这个目录应该被认为是一个Python包。
    • polls/models.py:在这个文件中,我们将为 我们的应用程序创建模型
    • polls/views.py:在这个文件中,我们将 创建视图
  • templates目录现在是空的。它应该包含模板文件。
  • 嵌套的目录migrations现在只包含包文件 _init_.py,但将来会用于将您对模型所做的更改(添加字段,删除模型等)传播到数据库模式中。阅读这里的迁移说明

请注意,您可以根据需要创建多个Django应用程序。要将应用程序添加到项目中,请运行该实用程序的 startapp任务manage.py工具|运行manage.py任务,然后startapp在控制台中输入)。

配置数据库

现在,当项目存根准备就绪时,让我们做一些微调。打开进行编辑settings.py要做到这一点,在项目工具窗口中选择文件,然后按F4该文件在编辑器的自己的选项卡中打开。

指定您要在应用程序中使用的数据库。为此,找到 DATABASES变量:单击Ctrl+F,然后在搜索字段中输入您要查找的字符串。然后,在该'ENGINE'行中,添加点数据库管理系统的名称(可以使用任何在注释之后指定的名称,但在开始时我们将开始sqlite3)。

在该'NAME'行中,输入所需数据库的名称,即使它尚不存在。

py_db_config

启动Django服务器

由于我们谨慎选择sqlite3,我们不需要定义其他值(用户凭证,端口和主机)。现在我们来看看我们的设置是否正确。这可以很容易地完成:只需启动 实用程序runserver任务manage.py:按Ctrl+Alt+R,然后在manage.py控制台中输入任务名称 

py_runserver

按照建议的链接,并看到以下页面:

py_runserver_result

创建模型

接下来,打开编辑该文件models.py,并注意导入语句已经在那里。然后键入下面的代码:

from django.db import models# the following lines added:import datetimefrom django.utils import timezoneclass Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') def __str__(self): return self.question_text def was_puplished_recently(self): now = timezone.now() return now - datetime.timedelta(days=1) <= self.pub_date <= now was_puplished_recently.admin_order_field = 'pub_date' was_puplished_recently.boolean = True was_puplished_recently.short_description = 'Published recently?'class Choice(models.Model): question = models.ForeignKey(Question) choice_test = models.CharField(max_length=200) votes = models.IntegerField(default=0) def __str__(self): return self.choice_test 复制

事实上,你可以复制粘贴,但打字是明智的 - 它可以帮助你看到强大的PyCharm的代码完成在行动:

py_completion

创建数据库

我们必须为新模型创建表格。为此,我们将使用魔术Ctrl+Alt+R 快捷键来调用manage.py控制台。首先执行的命令是makemigration

py_makemigration

因此,你告诉Django的这两款新车型已经建立,即Choice 和Question,并创建了一个迁移:

py_makemigration1

接下来,在提示符之后,键入以下命令:

sqlmigrate polls 0001

py_sqlmigrate

最后,运行migrate命令在数据库中实际创建这些表:

py_migrate

执行管理功能

首先,创建一个超级用户。为此,请superusermanage.py控制台中键入命令 ,指定您的电子邮件地址和密码:

py_superuser

由于我们已经决定启用网站管理,PyCharm已经取消了文件中对应的行的注释urls.py

但是,我们需要为管理网站启用编辑功能。为此,请打开 admin.py目录中的polls文件进行编辑,然后输入以下代码:

from django.contrib import admin# these lines added:from django.contrib import adminfrom .models import Choice, Questionclass ChoiceInline(admin.TabularInline):    model = Choice    extra = 3class QuestionAdmin(admin.ModelAdmin):    fieldsets = [        (None,               {'fields': ['question_text']}),        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),    ]    inlines = [ChoiceInline]admin.site.register(Question, QuestionAdmin)

再次注意代码完成:

py_completion1

准备运行/调试配置

我们现在准备进入管理页面。当然,可以运行Django服务器,然后进入浏览器,在地址栏中输入整个URL,但使用PyCharm有一个更简单的方法:使用预配置的Django服务器运行配置,稍作修改。

要打开此运行/调试配置以进行编辑,请在主工具栏上单击运行/调试配置选择器,然后选择编辑配置(或者选择 主菜单上的运行|编辑配置):

py_edit_runco​​nfig

Run / Dug Configuration对话框中,为这个运行/调试配置指定一个名称(在这里mysite),启用在默认浏览器中运行应用程序(选中复选框运行浏览器),并指定默认打开的站点的页面(这里是这个页面http://127.0.0.1:8000/admin/):

py_runco​​nfig

启动管理网站

现在,要启动应用程序,按Shift+F10,或点击跑主工具栏打开标准的Django网站登录页面:

py_login_page

登录后,将显示管理页面。它具有认证和授权(组和用户)部分,但民意调查不可用。为什么这样?

我们必须告诉管理员,Question对象有一个管理界面; 要做到这一点,让我们打开文件 polls/admin.py进行编辑(在“项目”视图中选择并按下 F4),然后输入以下代码:

from django.contrib import adminfrom .models import Question #this line addedadmin.site.register(Question)#this line added       

刷新页面,看到问题的民意调查部分出现:

py_site_admin_page

点击添加创建一些问题。

但是,每个问题都有一些选择,但是选择仍然不可用。再次,打开编辑文件polls/admin.py并将其更改如下:

from django.contrib import adminfrom .models import Choice, Questionclass ChoiceInline(admin.TabularInline):    model = Choice    extra = 3class QuestionAdmin(admin.ModelAdmin):    fieldsets = [        (None,               {'fields': ['question_text']}),        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),    ]    inlines = [ChoiceInline]admin.site.register(Question, QuestionAdmin

现在看看 更改问题 页面:
py_change_question

写视图

打开文件polls/views.py进行编辑并输入以下Python代码:

from django.http import HttpResponsedef index(request):   return HttpResponse("Hello, world. You're at the polls index.")
接下来,将新文件添加到 polls 名称所在目录中,  urls.py 并在其中键入以下代码:
from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^$', views.index, name='index'),]
接下来,打开编辑文件 mysite/urls.py (PyCharm已经为您创建)并添加索引页面的URL。你应该结束以下代码:
from django.conf.urls import include, urlfrom django.contrib import adminurlpatterns = [    url(r'^polls/', include('polls.urls')), #this line added    url(r'^admin/', include(admin.site.urls)),]
现在,打开页面 127.0.0.1:8000/polls/ 并享受:
py_result1

接下来,我们添加更多视图。再一次,将下面的代码添加到文件中polls/views.py

def detail(request, question_id):    return HttpResponse("You're looking at question %s." % question_id)def results(request, question_id):    response = "You're looking at the results of question %s."    return HttpResponse(response % question_id)def vote(request, question_id):    return HttpResponse("You're voting on question %s." % question_id) 
如果您现在在浏览器中打开相应的页面,您将看到,例如:
py_result2

创建Django模板

如你所见,这些页面的设计如果在视图中被硬编码。因此,为了使其更具可读性,您必须编辑相应的Python代码。然后让我们分离Python输出的可视化表示 - 为此,我们创建模板。

打开编辑文件polls/views.py并更改方法 index(顺便说一句,注意导入助手可以帮助您创建导入语句)。

from django.core.urlresolvers import reversefrom django.http import HttpResponseRedirectfrom django.shortcuts import render, get_object_or_404from django.utils import timezonefrom django.views import genericfrom .models import Choice, Questionclass IndexView(generic.ListView):   template_name = "polls/index.html"   context_object_name = "latest_question_list"   def get_queryset(self):       return Question.objects.filter(           pub_date__lte=timezone.now()           ).order_by('-pub_date')[:5]class DetailView(generic.DetailView):   model = Question   template_name = "polls/detail.html"   def get_queryset(self):       """       Excludes any questions that aren't published yet.       """       return Question.objects.filter(pub_date__lte=timezone.now())class ResultsView(generic.DetailView):   model = Question   template_name = "polls/results.html"   def vote(request, question_id):       p = get_object_or_404(Question, pk=question_id)           try:               selected_choice = p.choice_set.get(pk=request.POST['choice'])           except (KeyError, Choice.DoesNotExist):               return render(request, 'polls/detail.html', {                   'question': p,                   'error_message': "You didn't select a choice",               })           else:               selected_choice.votes += 1               selected_choice.save()               return HttpResponseRedirect(reverse('polls:results', args=(p.id,)))
您注意到的第一件事是对页面的未解决的引用 index.html
py_template1

PyCharm提出了一个快速的解决方法:如果你点击灯泡,或者按下 Alt+Enter,在模板文件夹中创建相应的模板文件(注意PyCharm也创建了polls模板应该驻留的目录):

py_template2

现在,文件index.html是空的。将下面的代码添加到它:

{% load staticfiles %}<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />{% if latest_question_list %}<ul>    {% for question in latest_question_list %}    <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>    {% endfor %}</ul>{% else %}<p>No polls are available.</p>{% endif %}

注意模板文件中的代码完成例如,当您键入开头时 {%,PyCharm会%} 自动添加匹配的关闭项,将光标放在将来输入的位置。HTML 标签中,代码完成也是可用的。

注意图标classTypeHtml,并pythonScript出现在文件左侧排水沟views.pyindex.html 分别为:

py_template3

这些图标使您能够立即在视图方法和模板之间跳转。在文章“ 在模板和视图之间导航”中阅读有关此类导航的更多信息

使用样式表

正如你可以在视图文件中看到的那样index.html,有一个对样式表的引用,并且没有解决:

通过以下方式解决该参考:

  1. 创建目录。为此,请在“项目”视图中选择Python软件包polls,然后按Alt+Insert

    在出现的弹出式菜单上,选择“ 目录”,然后指定目录结构的名称static/polls

  2. 接下来,在这个目录中创建一个样式表。为此,请选择最内层的目录 polls,按Alt+Insert,选择样式表选项 ,然后在打开的对话框中输入样式。
  3. 根据您的喜好,为创建的样式表提供一些内容。例如,我们希望看到一个绿色的问题列表:
    li a {color: green;} 复制

我们到了!

现在我们来看看可用的民意调查清单。我们的管理站点已经在运行,访问包含轮询列表(索引页面)的页面的最简单方法是指定其URL:在浏览器的地址栏中,而不是/admin/键入/polls/

py_result3

测试一下...

现在让我们看看PyCharm如何帮助简化测试你的应用程序。

已经有文件tests.pypolls目录。现在,这个文件是空的。当然,建议在这个特定的文件中放置新的测试。例如,我们想确保我们的调查不是空的:

import datetimefrom django.core.urlresolvers import reversefrom django.test import TestCasefrom django.utils import timezonefrom .models import Questiondef create_question(question_text, days):   time = timezone.now() + datetime.timedelta(days=days)   return Question.objects.create(question_text=question_text, pub_date=time)class QuestionViewTests(TestCase):   def test_index_view_with_no_questions(self):   """   If no questions exist, an appropriate message should be displayed.   """       response = self.client.get(reverse('polls:index'))       self.assertEqual(response.status_code, 200)       self.assertContains(response, "No polls are available.")       self.assertQuerysetEqual(response.context['latest_question_list'], [])

要运行此测试,请tests.py在编辑器中右键单击该文件的背景,然后选择Run Tests:polls.tests选项,或者只需按下Ctrl+Shift+F10

py_test_run1

测试结果显示在测试运行者

py_test_run2

概要

这个简短的教程已经结束。您已成功创建并启动了一个简单的Django应用程序。让我们重复一下PyCharm的帮助:

  • 一个Django项目和应用程序已经创建
  • Django服务器启动
  • 一个数据库配置
  • 模型,视图和模板创建
  • 应用程序启动
  • 测试创建和执行

本文翻译自https://www.jetbrains.com/help/pycharm/5.0/creating-and-running-your-first-django-project.html?origin=old_help

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值