进入虚拟环境
虚拟环境中安装django
新建一个文件夹
记得使用django-admin 而不是django-admin.py 这里和书上不一样
输入dir可以查看目录
被创建出来的文件夹里的东西
创建数据库:
python manage.py migrate
检查是否创建了项目 runserver
python manage.py runserver
打开浏览器 输入之前打印的网址 查看状态
激活虚拟环境
打开另外一个终端 切换到manage.py的目录 激活虚拟环境 startapp
作为一个app名字被创建了一个文件夹 就是下午六点的那个
里头的东西
定义模型Topic
补充的代码:
from django.db import models
class Topic(models.Model):
text=models.CharField(max_length=200)
date_added=models.DateTimeField(auto_now_add=True)
def __str__(self):
"""返回模型的字符串表示"""
return self.text
激活模型:
加入第42行:
`
#我的程序`
'learning_logs',
修改数据库
变成终端操作:
(ll_env) D:\日常生活\python练习作业\learning_log>python manage.py makemigrations learning_logs
应用迁移
让Django修改数据库
(ll_env) D:\日常生活\python练习作业\learning_log>python manage.py migrate
创建超级用户
python manage.py createsuperuser
email空着了
填写的密码是ab123456
被自动隐藏了 除了用户名
在admin.py(learning_logs)中输入代码 注册topic
from learning_logs.models import Topic
admin.site.register(Topic)
尝试一下登录管理员(记得要先激活 用runserver)
添加两个topic
添加模型Entry 在models.py中
class Entry(models.Model):
"""学习到的有关某个主题的具体知识"""
topic = models.ForeignKey(Topic,**on_delete=models.CASCADE,**) ##这个书上没有 是百度的 ondelete,不然会报错
text = models.TextField()
date_added=models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
"""返回模型的字符串表示"""
return self.text[:50]+"..."
迁移数据库并查看输出
D:\日常生活\python练习作业\learning_log>python manage.py makemigrations learning_logs
Migrations for 'learning_logs': ##自动生成的打印的
learning_logs\migrations\0002_entry.py
- Create model Entry
D:\日常生活\python练习作业\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
注册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)
现在/admin页面中出现的:(多了entry)
交互式终端Django shell
python manage.py shell
如何查看分配给每个主题对象的ID
>>> topics =Topic.objects.all()
>>> for topic in topics:
... print(topic.id,topic)
...
根据id查询属性
>>> t= Topic.objects.get(id=1)
>>> t.text
'Chess'
>>> t.date_added
datetime.datetime(2020, 6, 13, 11, 51, 17, 75113, tzinfo=<UTC>)
18.3映射url
修改urls.py
按照图片中的会报错,就百度了一下,是include的用法错误,不重新截图了,按照复制的代码
urlpatterns = [
url(r'^admin/', admin.site.urls),# 不用include()函数
url(r'', include(('learning_logs.urls','learning_logs'), namespace='learning_logs')),
]
在learning_logs中新建一个urls.py
编辑此文件
"""定义learning_logs的url模式"""
from django.conf.urls import url
from . import views
urlpatterns =[
#主页
url(r'^$',views.index,name='index'),
]
编写视图
为主页编写视图
from django.shortcuts import render
# Create your views here.
def index(request):
"""学习笔记的主页"""
return render(request,'learning_logs/index.html')
编写模块
新建一个文件夹叫templates,在这里面再建一个learning_logs,再建一个index.html
结构是这样的:
编写主页
<p>Learning Log</p>
<p>Learning Log helps you keep track of your learning , for any topic you're learning about.</p>
主页的亚子-----这里就是html的事情了
创建其他网页 模板继承
父模块
新建一个base.html 和index同目录
<p>
## 模板标签 {% %}
<a href="{% url 'learning_logs:index' %}">Learning Log</a>
</p>
{% block content %}{% endblock content %}
子模块继承(index)
{% extends "learning_logs/base.html" %}##继承的父模板
{% block content %}##没有继承的内容都这content两个标签之间
<p>Learning Log helps you keep track of your learning , for any topic you're learning about.</p>
{% endblock content %}
显示所有主题的页面
再次修改urls
#显示所有的主题
url(r'^topics/$',views.topics,name='topics'),
修改views.py
def topics(request):
"""显示所有主题"""
topics = Topic.objects.order_by('date_added')
context = {'topics':topics}
return render(request,'learning_logs/topics.html',context)
模板
新建topics.html 和index等同一个目录
{% 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 %}
修改父模板(base.html) 使其包含到显示所有主题的页面的链接
<p>
<a href="{% url 'learning_logs:index' %}">Learning Log</a>-
<a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>
{% block content %}{% endblock content %}
显示特定主题的页面
在learning_logs/urls.py中
#特定主题的详细界面
url(r'^topics/(?P<topic_id>\d+)/$',views.topic,name='topic'),
修改视图
def topic(request,topic_id):
"""显示单个主题及其所有条目"""
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)
模板
新建的topic.html
<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 %}
修改topics.html
<a href="{% url 'learning_logs:topic' topic.id %}">{{ topic}}</a>