老小白学django(持续更新)!!!

本文详细介绍了使用Django框架构建学习笔记应用的过程,包括环境搭建、模型定义、视图与模板创建等关键步骤,适合初学者实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是根据图灵程序设计丛书——《Python编程从入门到实践》来实践的
在这里插入图片描述
我用的Anaconda+pycharm来实践的,虚拟环境用的是Django1.11.4版本
走过很多弯路,曲曲折折,现在好多地方还是稀里糊涂的,在这里把这些东西写下来,算是对自己学习的一个记录,也希望有需要的朋友可以用来当个参考。本人是年龄偏大的小白,能力不足水平有限,如果有任何问题,还请您多多指教,在这里先行谢过!!!
20181029更新
第一部分 Django入门
一、建立项目
1、打开Anaconada 里面的 prompt,创建虚拟环境,conda create -n my_env,这个名字可以随便取

2、 安装django :conda install django
3、cd到想要的位置,创建项目: django-admin startproject learning_log
4、创建数据库: python manage.py migrate
5、查看项目 ,启动服务器: python manage.py runserver
在浏览器中输入127.0.0.1:8000

会用到的命令
conda env list 显示虚拟环境列表
activate my_env 激活虚拟环境
deactivate 停止使用虚拟环境
二、创建应用程序
1、打开另外一个prompt 终端窗口,切换到manage.py 所在的目录,激活该虚拟环境。

并使用 python manage.py startapp learning_logs
startapp learning_logs命令创建了一个应用程序所需要的基础设施
2、定义模型
使用pycharm里打开learning_logs 文件夹里的models.py,在里面输入以下内容

class Topic(models.Model):
    """用户学习主题"""
	text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        """返回模型的字符串表示"""
        return self.text

3、激活模型
首先,在settings.py里面添加learning_logs
然后使用: python manage.py makemigrations learning_logs
命令makemigrations 让Django确定该如何修改数据库,使其能够存储与我们定义的新模型相关联的数据。
python manage.py migrate
应用这种迁移

**每当要修改“学习笔记”管理数据时,都采取如下三个步骤:1、修改models.py 2、修改settings.py并对learning_logs调用makemigrations 3、让Django迁移项目 migrate **

3、Django管理网站
3.1创建超级用户
python manage.py createsuperuser
3.2向管理网站注册模型
修改admin.py
from learning_logs.models import Topic
admin.site.register(Topic)
之后访问网站http://127.0.0.1:8000/admin,就可以输入超级用户名和密码,可以添加和修改用户名和用户组了,还可以管理与刚才定义的模型Topic 相关的数据。
3.3添加主题
在这里插入图片描述
单击Topcis进入主题网页,单击Add,将看到添加新主题的表单,在第一个框中输入chess,再单击save. 继续添加Rock Climbing,再save 保存。

2018.1030更新!!!!!!
4、定义模型Entry
多对一关系,即多个条目对应一个主题

在models.py中继续添加

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
        #### Entry类是新添加的
class Entry(models.Model):
    topic = models.ForeignKey(Topic)###在django2.0版本,是需要添加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]+"..."

这里牵涉到不同的django版本的问题,为了学习方便,我用的是django1.11.4

5、迁移模型
每次添加一个新模型,都需要用到下面连个命令来迁移数据
python manag.py makemigrations appname
python manage.py migrate

6、向管理网站注册
注册模型Entry,admin.py中加入
from . import Topic,Entry
admin.site.register(Entry)

7、Django shell
python manage.py shell启动Python解释器

三、创建网页:学习笔记主页
创建网页的三个阶段:定义URL、编写视图、编写模板
1、映射URL
将基础URL(127.0.0.1:8000)映射到学习笔记主页
打开项目主文件夹中的learning_log中的urls.py(主url)

from django.contrib import admin
from django.conf.urls import include,url
    urlpatterns = [
        url(r'^admin/',include(admin.site.urls) ),
        url(r'',include('learning_logs.urls',namespace='learning_logs') ),

    ]

我们需要在learning_logs中创建创建另一个urls.py 文件(从url),它被包含(include)在主文件夹下的urls.py中

learning_logs中的urls.py 文件
from django.conf.urls import url
from . import views

urlpatterns = [
    #主页
    url(r'^$', views.index,name='index'),

]

2、编写视图
在应用learning_logs中的views.py中,创建新的视图

from django.shortcuts import render
def index(request):
    #学习笔记主页
    return render(request,'learning_logs/index.html')

3、编写模板
在learning_logs中新建templates文件夹,并在其中新建learning_logs文件夹,在其中新建一个index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
<p>Learning Log</p>
<p>Learning Log就是学习笔记啊
</p>
</body>
</html>

现在,输入127.0.0.1:8000/,将看到刚才创建的index.html,而不是默认的django网页了。django调用请求的url,发现URL与learning_logs中的url的 url(r’^$’, views.index,name=‘index’)相匹配,然后访问index.html

四、创建其他网页
将创建两个显示数据的网页,一个列出所有的主题,另一个显示特定主题的所有条目。
我们将先创建一个父模板
1、模板继承
编写一个包含通用元素的父模板,并让每个网页都继承这个模板。
(1)父模板
在tmplates的learning_logs中创建一个base.html,这个文件包含所有页面的元素,其他模板都将继承base.html。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>
    <a href="{% url 'learning_logs:index' %}">Learning Log</a>
</p>
{% block content %}{% endblock content %}
</body>
</html>

(2)子模板
重新编写子模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
{% extends "learning_logs/base.html" %}
{% block content %}
<p>Learning Log就是学习笔记啊</p>

{% endblock content %}

</body>
</html>

2、显示所有主题的页面
(1)URL模式
定义显示所有主题的页面的URL。我们使用一个简单的URl片段
来指出网页显示的信息。我们使用topics ,URL :127.0.0.1:8000/topics /将返回显示所有主题的页面

修改后的learnings_logs/urls.py

"""定义learning_logs中的URL模式"""
from django.conf.urls import url
from . import views

urlpatterns = [
    #主页
    url(r'^$', views.index,name='index'),
    #显示所有主题
    url(r'^topics/$',views.topics,name='topics')
]

(2)视图
函数topics()需要从数据库中获取数据,并发送给模板。
修改后的views.py

from django.shortcuts import render
from .models import Topic

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)

(3)模板
创建topics.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>topics</title>
</head>
<body>
{% extends "learning_logs/base.html" %}
{% block content %}
  <p>Topics</p>
  <ul>
      {% for topic in topics %}
        <li>{{ topic }}</li>
      {%  empty %}
        <li>没有主题被添加</li>
      {% endfor %}
  </ul>
{% endblock content %}
</body>
</html>

修改父模板base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>
    <a href="{% url 'learning_logs:index' %}">Learning Log</a>-
    #加入Topics的a链接
   <a href="{% url 'learning_logs:topics' %}">Topics</a>
</p>
{% block content %}{% endblock content %}
</body>
</html>

3、显示特定主体页面

创建一个专注于特定主题的页面——显示该主题的名称及该主题的所有条目,所以我们将定义一个新的URL模式,编写一个视图并创建一个模板。
(1)、URL模式
learning_logs中的urls.py更改为

"""定义learning_logs中的URL模式"""
from django.conf.urls import url
from . import views

urlpatterns = [
    #主页
    url(r'^$', views.index,name='index'),
    #显示所有主题
    url(r'^topics/$',views.topics,name='topics'),
    url(r'^topics/(?p<topic_id>\d+)/$',views.topics,name='topic'),###新增加的url
]

(2)、视图

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)

##新增的topic函数,将内容返回给topic.html
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)

(3)、模板
显示主题的名称和条目的内容,新建topic.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>topic</title>
</head>
<body>
{% 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>
            这个主题没有条目
        </li>
    {% endfor %}
    </ul>

{% endblock content %}
</body>
</html>

(4)、将显示所有主题的页面中的每个主题都设置为链接
修改topics.html,让每个主题都链接到相应的网页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>topics</title>
</head>
<body>
{% extends "learning_logs/base.html" %}
{% block content %}
  <p>Topics</p>
  <ul>
      {% for topic in topics %}
        <li><a href="{% url 'learning_logs:topic' topic.id  %}">{{ topic }}</a>#####新增加的
        </li>
      {%  empty %}
        <li>没有主题被添加</li>
      {% endfor %}
  </ul>
{% endblock content %}
</body>
</html>

照着书本抄脚本,也会出现一些小错误,头痛!!!

资源下链接为: https://pan.quark.cn/s/9e7ef05254f8 在网页设计中,为图片添加文字是一种常见的需求,用于增强视觉效果或传达更多信息。本文将介绍两种常用的方法:一种是将图片设置为背景并添加文字;另一种是利用<span>标签结合CSS定位来实现。 这种方法通过CSS实现,将图片设置为一个容器(通常是<div>)的背景,然后在容器中添加文字。具体步骤如下: 创建一个包含文字的<div>元素: 使用CSS设置<div>的背景图片,并调整其尺寸以匹配图片大小: 如有需要,可使用background-position属性调整图片位置,确保文字显示在合适位置。这样,文字就会显示在图片之上。 另一种方法是将文字放在<span>标签内,并通过CSS绝对定位将其放置在图片上。步骤如下: 创建一个包含图片和<span>标签的<div>: 设置<div>为相对定位,以便内部元素可以相对于它进行绝对定位: 设置<span>为绝对定位,并通过调整top和left属性来确定文字在图片上的位置: 这种方法的优点是可以精确控制文字的位置,并且可以灵活调整文字的样式,如颜色和字体大小。 两种方法各有优势,可根据实际需求选择。在实际开发中,还可以结合JavaScript或jQuery动态添加文字,实现更复杂的交互效果。通过合理运用HTML和CSS,我们可以在图片上添加文字,创造出更具吸引力的视觉效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值