ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第18章——从Django入手

2021-07-10 12:01:31  阅读:187  来源: 互联网

标签:Topic logs 入手 18 topics py Django topic learning


建立项目

  建立虚拟环境 python -m venv ll_env

  激活虚拟环境 ll_env/Scripts/activate

    (停止 deactivate)

  安装Django pip install django

    在Django 中创建项目 django-admin startproject learning_log

    创建数据库 pythonv manage.py migrate

    查看项目 python manage.py runserver    (Ctrl + C 关闭)

 

创建应用程序

另开一个终端,切换到manage.py 所在目录,激活虚拟环境

python manage.py startapp learning_logs

  定义模型 Topic(类), 属性:text, date_added, 方法 __str__

  激活模型 配置 settings.py     "Installed_app"中添加“learning_logs”

    修改数据库

      python manage.py makemigrations learning_logs (在migration下自动创建0001_initial.py,在数据库中为Topic创建一个表)

      python manage.py migrate    (Applying)

      修改管理数据的三个步骤: 修改models.py——对 learning_logs 调用makemigrations——让Django 迁移项目

 

  Django管理网站

    1、创建超级用户 python manage.py createsuperuser

    2、向管理网站注册模型 admin.py

        from .models import Topic

        admin.site.register(Topic)

        (可访问 https://localhost:8000/admin/. 输入用户名和密码,可修改添加用户和用户组,管理Topic相关的数据)

    3、添加主题

      创建Chess 和 Rock Climbing 两个主题

  新增模型 Entry (条目)

    属性:topic, text, date_added, 嵌套Meta 类, 方法__str__

  注册模型 Entry

    新增3个条目

  Django shell 交互环境   python manage.py shell 启动 python 解释器

    from learning_logs.models import Topic

    topics = Topic.objects.all()

    for topic in topics:

      print(topic.id, topic)

    t = Topic.objects.get(id=1)

    t.text

    t.date_added

    t.entry_set.all()     通过外键获取数据  相关模型的小写名称、下划线和单词 set

 

创建页面:

学习笔记主页

创建页面三个阶段:定义URL、编写视图和编写模板。

  定义URL

  映射URL:在 learning_log/urls.py    path('admin/', admin.site.urls)

  添加 from django.urls import path, include

       path('', include('learning_logs.urls'))

  新建 learning_logs/urls.py 定义learning_logs 的URL模式

    from django.urls import path

    from . import views

    app_name = 'learning_logs'

    url-patterns = [

        # 主页

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

    ]

  编写视图 learning_logs/views.py

  def index(request):

    ""学习笔记的主页。""

    return render(request, 'learning_logs/index.html')

  编写模板 learning_log/learning_logs/templates/learning_logs/index.html

 

创建其他页面

模板继承

  父模板 base.html   

    模板标签 {% url 'learning_logs: index '%}  命名空间

    HTML链接用锚标签定义: <a href= "link_url">link text</a>

              块标签: {% block content %} {% endblock content %}

  子模板 index.html

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

 

显示所有主题的页面

  1、URL模式

  显示所有主题的URL http://localhost:8000/topics/

  修改learning_logs/urls.py

  #添加显示所有主题。 path('topics', views.topics, name='topics')

  2、视图

  修改learning_logs/views.py

  from .models import Topic

  def topics(request):

    "显示所有的主题。""

    topics = Topic.objects.order_by('date_added')

    context = {'topics': topics}  # 发送给模板的上下文

    return render(request, 'learning_logs/topics.html', context)

  3、模板 topics.html

  项目列表为无序列表, <u1></u1>

  循环  {% for item in list %}

      do something with each item 

     {% endfor %}

  {{ 模板变量 }} 

  <1i></1i> 一个项目列表项,在<u1></u1>内部

  <% empty %> 列表为空时的处理

  

  修改父模板 base.html

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

  <a href="{% url 'learning_logs: topics'%}">Topics</a>

 

显示特定主题的页面

1、url 模式 learning_logs/urls.py

  path('topics/<int:topic_id>/', views.topic, name='topic') # 特定主题的详细页面

2、视图 views.py

  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、模板

  竖线(|)表示模板过滤器  {{ entry.date_added | date: 'M d, Y H:i '}}

  {entry.text | linebreaks } 将包含换行符的长条目转换为浏览器能够理解的格式

4、将显示所有主题的页面中的主题设置为链接

  修改topics.html

  <a/ href = "{% url 'learning_logs: topic' topic.id%}">{{ topic }}</a>

 

 

  

 

 

 

 

 

  

  

 

    

    

 

 

 

    

 

标签:Topic,logs,入手,18,topics,py,Django,topic,learning
来源: https://www.cnblogs.com/no-one-me/p/14992295.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有