博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django入门项目实践(上)
阅读量:6658 次
发布时间:2019-06-25

本文共 5061 字,大约阅读时间需要 16 分钟。

项目结构

1393432-20190324190155962-1170332599.png

1.建立项目

File -->> New Project...

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

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

1393432-20190324204201710-1384173795.png

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

1393432-20190324203827160-1209757044.png

2.创建应用程序

Django项目由一系列应用程序组成,它们协同工作,让项目成为一个整体。

实际上,PyCharmTerminal窗口已经处于Django项目独立的运行环境,执行python manage.py startapp learning_logs命令创建一个应用程序:
1393432-20190324205159251-58844683.png

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

1393432-20190324205808567-1832367266.png

2.1 定义模型

# untitled/learning_logs/models.pyfrom django.db import modelsclass 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.textclass 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 definitionINSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    # 我的应用程序    'learning_logs',]# ···

2.3 创建数据库

1393432-20190324212332706-464969518.png

1393432-20190324213318669-1110141462.png

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

1393432-20190324213640112-2084130776.png

1393432-20190324214052022-1593319897.png

2.4 Django管理网站

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

创建超级用户:
1393432-20190324214513890-1823224655.png

向管理网站注册模型:

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

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

1393432-20190324215205986-321467933.png

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

1393432-20190324215731424-82018771.png

2.5 Django shell

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

1393432-20190324220856143-1407983987.png

3.创建网页

使用Django创建网页的过程通常分三个阶段:定义URL、编写视图和编写模板。

每个URL都被映射到特定的视图——视图函数获取并处理网页所需的数据。视图函数通常调用一个模板,后者生成浏览器能够理解的网页。

3.1 映射URL

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

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

3.2 编写视图

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

3.3 编写模板

Learning Log

Learning Log helps you keep track of your learning, for my topic you're learning about.

1393432-20190324233456313-264956832.png

3.3.1 父模板

Learning Log

{% block content %}{% endblock %}

3.3.2 子模板

{% extends "learning_logs/base.html" %}{% block content %}

Learning Log helps you keep track of your learning, for any topic you're learning about.

{% endblock content %}

显示所有主题的页面

"""定义learning_logs的URL模式"""# untitled/learning_logs/urls.pyfrom django.conf.urls import urlfrom . import viewsapp_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)# ···
{% extends "learning_logs/base.html" %}{% block content %}

Topics

    {% for topic in topics %}
  • {
    { topic }}
  • {% empty %}
  • No topics have been added yet.
  • {% endfor %}
{% endblock content %}

1393432-20190324235721355-804172482.png

显示特定主题的页面

"""定义learning_logs的URL模式"""# untitled/learning_logs/urls.pyfrom django.conf.urls import urlfrom . import viewsapp_name = 'learning_logs'urlpatterns = [    # 主页    url(r'^$', views.index, name='index'),    url(r'^topics/$', views.topics, name='topics'),    url(r'^topics/(?P
\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)#···
{% extends 'learning_logs/base.html' %}{% block content %}

Topic: {

{ topic }}

Entries:

    {% for entry in entries %}
  • {

    { entry.date_added|date:'M d, Y H:i' }}

    {

    { entry.text|linebreaks }}

  • {% empty %}
  • There are no entries for this topic yet.
  • {% endfor %}
{% endblock content %}

1393432-20190325001401761-2004580342.png

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

转载于:https://www.cnblogs.com/gzhjj/p/10589519.html

你可能感兴趣的文章
Xcode/iOS 5 开发定位服务的App
查看>>
Java Swing 组件大全实例演示
查看>>
asterisk常用调试监测命令
查看>>
子用户-角色-权限-菜单 浅谈:子账户设计方案
查看>>
无服务器端的UDP群聊功能剖析(重构版本)
查看>>
Linux进程间通信之信号量(semaphore)、消息队列(Message Queue)和共享内存(Share Memory)...
查看>>
对象失去焦点时自己动提交数据 V2
查看>>
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(10月22日-10月28日)
查看>>
ESX启动故障排除一“Cannot open the disk ‘XXXXXX.vmdk’ or one of the snapshot disks it depends on.”...
查看>>
FileBytes写成文件并存档
查看>>
Metro App中关于挂起与恢复的操作
查看>>
Stani's Python Editor下载
查看>>
[译]Javascript:Harmony(ECMAScript规范)制定流程
查看>>
每天一个linux命令(36):diff 命令
查看>>
2012第50周五
查看>>
一个简单的算法_应该是最笨的写法了
查看>>
20120622第二天_面向对象\02面向对象
查看>>
[翻译].NET框架中的缓存
查看>>
Microsoft Visual Studio 2010 正式版下载[含旗舰版序列号](中、英文版)
查看>>
轻快的VIM(四):修改
查看>>