Django 实例介绍 - Pycharm

1. 创建工程

idea-create-project

Location: 项目路径

Application name: 应用名称

2. 项目目录视图

idea-project-structure

  • demosite 包含项目的文件夹
  • manage.py 命令工具,用于管理Django项目
  • 内嵌demosite python包
  • demosite/settings.py Django项目的配置文件
  • demosite/urls.py Django项目路由
  • demosite/wsgi.py Django项目部署配置
  • polls 应用路径
  • polls/admin.py Django后台管理配置
  • polls/models.py polls模型
  • polls/views.py polls视图
  • polls/tests.py polls测试
  • polls/apps.py polls入口
  • templates 模板文件夹

3. 配置数据库

文件 demosite/settings.py,如果链接其他数据库,需要修改ENGINE参数

# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.demo.site'),
    }
}

4. 创建模型

编辑 polls/models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models
# the following lines added:
import datetime
from django.utils import timezone


class 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_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now

    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'


class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

5. 创建数据库

执行命令:Tools-> Run Manage.py Task... 或者直接按快捷键:⌥R, 在弹出的命令窗口中执行声明模型变化命令:makemigrations polls
idea-makemigrations-polls

执行提交命令:sqlmigrate polls 0001

idea-sqlmigrate-polls

最后执行命令:migrate,在数据库中创建表

idea-migrate

6. 创建超级用户

在Run Manage.py Task...命令窗口执行命令:createsuperuser

idea-createsuperuser

在创建用户过程中,需要输入的信息有

  • UserName
  • Email address
  • Password
  • Password(again)

7. 配置管理端

编辑 polls/admin.py

from django.contrib import admin
from .models import Choice, Question


class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]


admin.site.register(Question, QuestionAdmin)

8. 编辑视图

编辑 polls/views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Question, Choice


def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)


def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})


def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/results.html', {'question': question})


def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

9. 编辑路由

编辑文件 demosite/urls.py

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^polls/', include('polls.urls')),  # this line added
    url(r'^admin/', admin.site.urls),
]

添加polls的路由文件 polls/urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
]

10. 创建视图模板

在templates下创建文件夹polls,之后创建index.html、detail.html、results.html

编辑 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 'detail' question.id %}">{{ question.question_text }}</a></li>
    {% endfor %}
       </ul>
{% else %}
           <p>No polls are available.</p>
{% endif %}

11. 使用样式

在polls包下创建文件夹:static/polls,之后创建样式文件style.css:

li a {
    color: green;
}

12. 测试

编辑 polls/tests.py

import datetime
from django.core.urlresolvers import reverse
from django.test import TestCase
from django.utils import timezone
from .models import Question


def 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('index'))
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "No polls are available.")
        self.assertQuerysetEqual(response.context['latest_question_list'], [])

执行测试:

idea tests run

13. 运行

在程序运行过程中,python2.7可能会报ASCII编码错误,请在polls/apps.py 中添加:

from django.apps import AppConfig
import sys # new add

reload(sys) # new add
sys.setdefaultencoding('utf-8') # new add


class PollsConfig(AppConfig):
    name = 'polls'

原文:
https://www.jetbrains.com/help/pycharm/step-4-creating-and-running-your-first-django-project.html

转载于:https://www.cnblogs.com/zhuhc/p/7806694.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值