Django入门(一)——学习笔记

说明:该学习笔记是在windows上完成的,所以代码部分与linux有区别

第一步:创建项目

1.1 建立虚拟环境

要使用Django,首先需要建立一个虚拟工作环境。虚拟环境是系统的一个位置,可以在其中安装包,与python的其他包隔离。我们需要新建一个目录,命名为learning_log,在终端中切换至该目录,并创建一个虚拟环境,代码如下:

1.2 激活虚拟环境

建立虚拟环境之后,要如下激活:

linux系统中该步骤的代码是:

learning_log$ source ll_env/bin/activate

1.3安装Django

(ll_env) E:\learning_log>pip install Django

1.4在Django中创建项目

(ll_env) E:\learning_log>django-admin.py startproject learning_log .

如上代码新建一个名为learning_log的项目,最后的句点让新项目的目录结构更有利于后期将应用程序部署到服务器

分别执行命令:

(ll_env) E:\learning_log>dir
(ll_env) E:\learning_log>dir learning_log

可以看到对应目录下新出现的文件

1.5创建数据库

(ll_env) E:\learning_log>python manage.py migrate

如果成功后可以看到多了一个图中的数据库文件

1.6 查看Django是否正确地创建了项目

(ll_env) E:\learning_log>python manage.py runserver

执行代码后出现如下:

然后在浏览器里输入http://127.0.0.1:8000/或者localhost:8000,如果出现下图中情况,代表我们目前第一步已经成功了

第二步:创建应用程序

2.1创建应用程序的基础

(ll_env) E:\learning_log>python manage.py startapp learning_logs

命令startapp newapp,让Django建立创建应用程序所需要的基础。现在查看目录,可以看到新增了一个learning_logs的文件夹,打开后可以看到新创建了.py文件

其中最重要几个的是models.py admin.py views.py;其中models.py是用来定义我们要在应用程序中管理的数据

2.2 定义模型 models.py

打开上一步新生成的models.py

文件,输入如下代码:

from django.db import models

# Create your models here.
class Topic(models.Model):
	
	text = models.CharField(max_length=200)
	date_added = models.DateTimeField(auto_now_add=True)
	def __str__(self):
	
		return self.text

在代码层面,模型就是一个类;

属性text是一个CharField——由字符或文本组成的数据,需要存储少量的文本,比如名称或者标题

属性date_added是一个DateTimeField——记录日期和时间的数据,auto_now_add=True的参数设置,让Django自动设置成当前日期和时间

2.3激活模型

需要将新建的模型添加到settings.py中,才可以使用模型,让Django将应用程序包含到项目中。

打开settings.py,添加learning_logs

这是一个元组,告诉Django项目是由那些应用程序组成的;接下来需要让Django修改数据库,使其能够存储跟模型Topic相关的信息,命令如下:

(ll_env) E:\learning_log>python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
  learning_logs\migrations\0001_initial.py
    - Create model Topic

命令makemigrations让Django确定该如何修改数据库,使其能够存储我们定义的新模型相关联的数据,输出表明创建了一个名字为0001_initial.py的迁移文件,这个文件将在数据库中为模型创建一个表

下面来应用这种迁移,让Django帮我们修改数据库:

(ll_env) E:\learning_log>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, learning_logs, sessions
Running migrations:
  Applying learning_logs.0001_initial... OK

每当需要修改项目的管理的数据时:都需要以下三个步骤:1.修改model.py;2.对learning_logs调用makemigrations;3.让Django迁移项目

2.4 Django管理网站

为应用程序定义模型时,Django提供的管理网站可以让我们轻松的处理模型,可以通过使用模型Topic来添加一些主题

创建超级用户,执行以下操作,并填写相关信息:

(ll_env) E:\learning_log>python manage.py createsuperuser
Username (leave blank to use 'dxc'):
Email address:
Password:
Password (again):
Superuser created successfully.

接下来需要向管理网站注册模型。Django自动在管理网站中添加里一些模型,如User和Group,对于我们创建的模型,必须进行手工注册。

创建应用程序时,Django在models.py所在的目录中创建了一个名为admin.py的文件,打开该文件:编辑如下进行新模型Topic的注册:

from django.contrib import admin

# Register your models here.
from learning_logs.models import Topic

admin.site.register(Topic)

现在就可以使用超级用户访问管理网站了,访问地址就是http://localhost:8000/admin/,输入账号密码之后就可以看到下图:

可以看到在应用程序learning_logs下面多了一个Topics的模型

可以在topics模型中添加两个话题python和java,然后分别save

2.5 定义模型Entry

要记录有关python和java的相关知识,需要为用户可在学习笔记中添加的条目定义模型。每个条目都与特定主题相关联,这种关系是多对一的,即多个条目可关联到同一个主题

在models.py中添加模型Entry的代码:


from django.db import models

# Create your models here.
class Topic(models.Model):
	
	text = models.CharField(max_length=200)
	date_added = models.DateTimeField(auto_now_add=True)
	def __str__(self):
	
		return self.text
		
class Entry(models.Model):
	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 self.text[:50]+"..."
		

2.6 迁移模型Entry

还是之前的那三个步骤:

(ll_env) E:\learning_log>python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
  learning_logs\migrations\0002_entry.py
    - Create model Entry

(ll_env) E:\learning_log>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, learning_logs, sessions
Running migrations:
  Applying learning_logs.0002_entry... OK

并生成了新的迁移文件0002——entry.py

2.7向管理网站注册Entry

将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://localhost:8000/admin/learning_logs/,带年纪Entries的Add链接,分别为python和java添加你学到的知识点

第三步:创建网页:Learning Log主页

使用Django创建网页的过程通常分为三个阶段:1.定义URL;2.编写视图;3.编写模板.

3.1映射URL

打开learning_log中的文件urls.py,编辑如下代码:

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

urlpatterns = [
    path('admin/', admin.site.urls),
	path('',include('learning_logs.urls'),name = 'learning_logs')
]

在learning_logs中创建另一个urls.py文件如下:

from . import views
from django.urls import path,include

urlpatterns = [

	path('',views.index,name = 'index')
]

3.2编写视图

打开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编写模板

模板定义了网页的结构,在文件夹learning_logs中新建一个文件夹,并命名为templates,在templates中再新建一个learning_logs的文件夹,在该文件夹中新建一个index.html文件。

代码如下(随便写什么,我这里放了Zen of Python):

<p>Learning Log</p>
<p>The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!</p>

第四步:创建其他网页

4.1模板继承

4.1.1 父模板

首先在index.html所在的目录创建一个名字为base.html的模板,这个模板包含其他所有页面都有的元素,其他的模板都继承base.html。

<p>
	<a href="{% url 'learning_logs:index' %}">Learning Log</a>
   
</p>
{% block content %}{% endblock content %}

4.1.2 子模版

现在需要重新写index.html,使它继承base.html

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

{% block content %}
	<p>The Zen of Python, by Tim Peters

	Beautiful is better than ugly.
	</p>
{% endblock content %}

4.2显示所有主题页面

4.2.1 URL模式

首先定义显示所有主题页面的URL,

from . import views
from django.urls import path,include,re_path

urlpatterns = [
	path('',views.index,name='index'),
    path('topics/',views.topics,name='topics'),
]
app_name = 'learning_logs'

4.2.2 视图views

函数topics()需要从数据库中获取数据,并将其发送给模板,更改views.py的代码如下:

from django.shortcuts import render
from .models import Topic
# Create your views here.
def index(request):
	return render(request,'learning_logs/index.html')
	
def topics(request):
	topics = Topic.objects.order_by('date_added')
	context = {'topics':topics}
	return render(request, 'learning_logs/topics.html', context)

4.2.3模板

显示所有主题页面的模板接受字典context,以便能够使用topics()提供的数据,创建文件topics.html,存储到index.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 %}

下一步需要修改父模板,使其包含到显示所有主题的页面的链接

<p>
	<a href="{% url 'learning_logs:index' %}">Learning Log</a>
     - 
    <a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>
{% block content %}{% endblock content %}

此时访问localhost:8000/topics/将会看到下面这样的网页:

 

猜你喜欢

转载自blog.csdn.net/dxcve/article/details/81284901