美文网首页
Django入门1

Django入门1

作者: 蜘蛛的梦呓 | 来源:发表于2018-04-10 09:32 被阅读0次

Django 我单独起个标题,因为页数有点多,且第一次接触后端的知识。

Django 是一个 web 框架 —— 一套用于帮助开发交互式网站的工具。

18.1 建立项目

我是在 window10 下创建这个项目的。

18.1.2 建立虚拟环境

为项目新建一个目录,将其命名为 learning_log,再在终端切换到这个目录。

python -m venv 11_env

18.1.3 安装 virtualenv

pip install --user virtualenv

18.1.4 激活环境

11_env\Scripts\activate

18.1.5 安装 Django

pip install Django

18.1.6 在 Django 中创建项目

Django-admin.py startproject learning_log .

一定要注意后面那个点不要忘了。

18.1.7 创建数据库

python manage.py migrate

可能会出现错误,尝试升级 pip 与 Django 版本应该能解决。

18.1.8 查看项目

python manage.py runserver

启动服务器,之后打开浏览器输入 127.0.0.1:8000,可查看是否搭起环境,如果要关闭这个服务器,可以按CRTL + C。

18.2 创建应用程序

当前,在前面打开的终端运行着 runserver,所以请再打开一个终端。

python manage.py startapp learning_logs

18.2.1 定义模型

修改 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

18.2.2 激活模型

修改 setting.py

#注册
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #我的程序
    'learning_logs',
]

迁移数据库

python manage.py makemigrations learning_logs

应用迁移

python manage.py migrate

每当需要修改时,基本为三步:1.修改 models.py ; 2.对 learning_logs 调用 makemigrations;3.让 Django 迁移。

18.2.3 Django 管理网站

1.创建超级用户

python manage.py createsuperuser

会提示数据名字和email和密码。

建立好之后,再次打开数据库,你会发现在auth_user中多了条记录,名字是你自己起的,密码是散列。

2.注册模型

修改 admin.py

from django.contrib import admin

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

admin.site.register(Topic)

3.添加主题

18.2.4 定义模型 Entry

修改 models.py

-- snip --
class Entry(models.Model):
    '''学到的有关某个主题的具体知识'''
    # Entry 建立了三个字段,topic,text和 date_added。

    #解决TypeError: __init__() missing 1 required positional argument: 'on_delete'
    #少位置参数on_delete,重新指定外键方式
    topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    #Meta 存储用于管理模型的额外信息
    class Meta:
        verbose_name_plural = 'entries'

    def __str__(self):
        '''返回模型的字符串表示'''
        return self.text[:50] + '...'

18.2.5 迁移模型

python manage.py makemigrations learning_logs

python manage.py migrate

18.2.6 注册 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)

18,2,7 Django shell

输入了一些数据之后,就能通过交互式的编程方式查看这些数据了。这种交互式环境称为 Django shell。

python manage.py shell

>>> from learning_logs.models import Topic
>>> Topic.objects.all()

[<Topic: Chess>, <Topic: Rock Climbing>]

18.3 创建网页:学习笔记主页

使用Django创建网页的几个步骤:

  1. 定义URL

  2. 编写视图函数

  3. 编写模板

18.3.1 映射 URL

打开learning_log下面的文件urls

from django.conf.urls import url, include
from django.contrib import admin

# 该模块定义了可在管理网站中请求的所有 URL

urlpatterns = [
    #去掉第一个url后的include(),不然报错
    url(r'^admin/',admin.site.urls),
    # 实参 namespace,让我们能够将 learning_logs 的 URL 同项目中的其他 URL 区分开来。

    url(r'', include('learning_logs.urls', namespace='learning_logs')),
]

打开 learning_logs,创建另一个 url

from django.conf.urls import url
from . import views

'''定义 learning_logs 的 URL 模式'''
# 该模块定义了可在管理网站中请求的所有 URL
urlpatterns = [

    # url() 的第一个参数是正则表达式,第二个是要调用的视图函数,第三个是这个 URL 模式的名称
    # r:让 python 将接下来的字符串视为原始字符串
    # ^:查看字符串开头
    # $:查看字符串末尾
    # (r'^$'):即表示头尾没有任何东西的 URL(python 默认忽略项目的基础 URL(http://localhost:8080/)),
    # 所以这个正则表达式匹配基础 URL。

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

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

    # 特定主题的详细页面
    url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),

]
#与书本上版本不一样,注意添加这个(书上没有)
app_name = "learning_logs"

18.3.2 编写视图

view.py

from django.shortcuts import render
from .models import Topic

# Create your views here.


def index(request):
    '''学习笔记的主页'''
    return render(request, 'learning_logs/index.html')
    # URL 请求与我们刚才定义的模式匹配时,Django 将在文件 views.py 中查找函数 index(),再将
    # 请求对象传递给这个视图函数。

def topics(request):
    '''显示所有主题'''
    topics = Topic.objects.order_by('date_added')
    context = {'topics':topics}
    return render(request,'learning_logs/topics.html',context)



def topic(request,topic_id):
    '''显示单个主题以其所有条目'''


    topic = Topic.objects.get(id=topic_id)
    entries = topic.entry_set.order_by('-date_added')
    context = {'topics': topics, 'entries': entries}
    return render(request, 'learning_logs/topic.html', context)

18.3.2 编写模板

base.html

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

{% block content %}{% endblock %}

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 %}

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 %}

topics.html

{% 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>No topics have been added yet.</li>
    {% endfor %}
  </ul>

{% endblock content %}

模板继承:

创建网页时,几乎都有一些索引网页包含的元素,在这种情况下可以编写一个包含通用的元素的父模板。

模板标签:

{% %}:生成页面显示的信息

总之,今天的内容主要有 2 个套路。

套路1:

  1. 定义模型
  2. 生成迁移文件
  3. 迁移数据库

套路2:

  1. 定义URL
  2. 编写视图函数
  3. 编写模板

今天就这样了,清明期间有点累,基本没看书,从今天开始调整状态。

相关文章

网友评论

      本文标题:Django入门1

      本文链接:https://www.haomeiwen.com/subject/twgwhftx.html