zoukankan      html  css  js  c++  java
  • Django入门项目实践(上)

    项目结构

    1.建立项目

    File -->> New Project...

    第一个Location是项目所在的目录,第二个Location是项目独立的Python运行环境,我们称之为Virtualenv
    Base interpreter是Python安装目录下的python.exe
    刚创建的Django项目如下所示:

    Terminal窗口输入命令python manage.py runserver也可以启动项目。

    在浏览器中访问http://127.0.0.1:8000/,看到下面这个页面表明项目到目前为止一切正常。

    2.创建应用程序

    Django项目由一系列应用程序组成,它们协同工作,让项目成为一个整体。
    实际上,PyCharmTerminal窗口已经处于Django项目独立的运行环境,执行python manage.py startapp learning_logs命令创建一个应用程序:

    创建完应用程序后,就可以在项目中看到新增的应用程序的目录。

    2.1 定义模型

    # untitled/learning_logs/models.py
    from django.db import models
    
    
    class Topic(models.Model):
        """A topic the user is learning about."""
        text = models.CharField(max_length=200)
        date_added = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            """Return a string representation of the model."""
            return self.text
    
    
    class Entry(models.Model):
        """Something specific learned about a topic."""
        topic = models.ForeignKey('Topic', on_delete=models.CASCADE)
        text = models.TextField()
        date_added = models.DateTimeField(auto_now_add=True)
    
        class Meta:
            verbose_name_plural = 'entries'
    
        def __str__(self):
            """Return a string representation of the model."""
            return self.text[:50] + "..."
    
    

    2.2 激活模型

    # untitled/untitled/settings.py
    # ···
    # Application definition
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    
        # 我的应用程序
        'learning_logs',
    ]
    
    # ···
    

    2.3 创建数据库

    接着,先后执行命令python manage.py makemigrations learning_logspython manage.py migrate,前者生成一个文件0001_initial.py告诉Django如何修改数据库,后者就让Django修改数据库了。

    2.4 Django管理网站

    为应用程序定义模型时,Django提供的管理网站让你能够轻松地处理模型。
    创建超级用户:

    向管理网站注册模型:

    # untitled/learning_logs/admin.py
    from django.contrib import admin
    
    # Register your models here.
    from learning_logs.models import Topic, Entry
    
    admin.site.register(Topic)
    admin.site.register(Entry)
    
    

    使用超级用户访问管理网站http://127.0.0.1:8000/admin/

    我们可以在管理网站管理模型的数据:

    2.5 Django shell

    输入一些数据后,就可通过交互式终端会话以编程方式查看这些数据了。这种交互式环境称为Django shell,是测试项目和排除其故障的理想之地。

    3.创建网页

    使用Django创建网页的过程通常分三个阶段:定义URL、编写视图和编写模板。
    每个URL都被映射到特定的视图——视图函数获取并处理网页所需的数据。视图函数通常调用一个模板,后者生成浏览器能够理解的网页。

    3.1 映射URL

    http://127.0.0.1:8000/默认返回Django网站,我们修改这一点,将这个URL映射到“学习笔记”的主页。

    # untitled/untitled/urls.py
    from django.contrib import admin
    from django.urls import path
    from django.conf.urls import include, url
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        url(r'', include('learning_logs.urls', namespace='learning_logs'))
    ]
    
    
    """定义learning_logs的URL模式"""
    
    # untitled/learning_logs/urls.py
    from django.conf.urls import url
    
    from . import views
    
    app_name = 'learning_logs'
    
    urlpatterns = [
        # 主页
        url(r'^$', views.index, name='index'),
    ]
    
    

    3.2 编写视图

    # untitled/learning_logs/views.py
    from django.shortcuts import render
    
    # Create your views here.
    
    
    def index(request):
        """学习笔记的主页"""
        return render(request, 'learning_logs/index.html')
    
    

    3.3 编写模板

    <!-- untitled/templates/learning_logs/index.html -->
    <p>Learning Log</p>
    
    <p>Learning Log helps you keep track of your learning, for my topic you're learning about.</p>
    

    3.3.1 父模板

    <!-- untitled/templates/learning_logs/base.html -->
    <p>
      <a href="{% url 'learning_logs:index' %}">Learning Log</a>
    </p>
    
    {% block content %}{% endblock %}
    
    

    3.3.2 子模板

    <!-- untitled/templates/learning_logs/index.html -->
    {% extends "learning_logs/base.html" %}
    
    {% block content %}
      <p>Learning Log helps you keep track of your learning, for any topic you're
      learning about.</p>
    {% endblock content %}
    
    

    显示所有主题的页面

    """定义learning_logs的URL模式"""
    
    # untitled/learning_logs/urls.py
    from django.conf.urls import url
    
    from . import views
    
    app_name = 'learning_logs'
    
    urlpatterns = [
        # 主页
        url(r'^$', views.index, name='index'),
        url(r'^topics/$', views.topics, name='topics'),
    ]
    
    
    # untitled/learning_logs/views.py
    
    #···
    
    def topics(request):
        topics = Topic.objects.order_by('date_added')
        context = {'topics' : topics}
        return render(request, 'learning_logs/topics.html', context)
    
    # ···
    
    <!-- untitled/templates/learning_logs/topics.html -->
    {% extends "learning_logs/base.html" %}
    
    {% block content %}
    
      <p>Topics</p>
    
      <ul>
        {% for topic in topics %}
          <li>{{ topic }}</li>
        {% empty %}
          <li>No topics have been added yet.</li>
        {% endfor %}
      </ul>
    
    {% endblock content %}
    
    

    显示特定主题的页面

    """定义learning_logs的URL模式"""
    
    # untitled/learning_logs/urls.py
    from django.conf.urls import url
    
    from . import views
    
    app_name = 'learning_logs'
    
    urlpatterns = [
        # 主页
        url(r'^$', views.index, name='index'),
        url(r'^topics/$', views.topics, name='topics'),
        url(r'^topics/(?P<topic_id>d+)/$', views.topic, name='topic'),
    ]
    
    
    # untitled/learning_logs/views.py
    
    #···
    
    def topic(request, topic_id):
        """Show a single topic, and all its entries."""
        topic = Topic.objects.get(id=topic_id)
        entries = topic.entry_set.order_by('-date_added')
        context = {'topic': topic, 'entries': entries}
        return render(request, 'learning_logs/topic.html', context)
    
    #···
    
    <!-- untitled/templates/learning_logs/topic.html -->
    {% extends 'learning_logs/base.html' %}
    
    {% block content %}
    
      <p>Topic: {{ topic }}</p>
    
      <p>Entries:</p>
      <ul>
      {% for entry in entries %}
        <li>
          <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
          <p>{{ entry.text|linebreaks }}</p>
        </li>
      {% empty %}
        <li>
          There are no entries for this topic yet.
        </li>
      {% endfor %}
      </ul>
    
    {% endblock content %}
    
    

    参考资料:《Python编程从入门到实践》—【美】Eric Matthes 著

  • 相关阅读:
    在C#中如何使用资源的方法
    C#调用windows API的一些方法
    Uml学习-类图简介
    Uml学习-用例建模简介
    sqlserver中DATE类型的数据转化 CONVERT
    mysql database和schema区别
    nginx buffer
    django pk 和id用法
    sed正则
    kong 插件开发分析
  • 原文地址:https://www.cnblogs.com/gzhjj/p/10589519.html
Copyright © 2011-2022 走看看