美文网首页
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