zoukankan      html  css  js  c++  java
  • 6章 Models

    传统的MVC结构中,有模型这么一个概念。Django中,Models又是怎么一回事呢?

    刚才生成的这些乱七八糟的数据迁移就是Django自带的一些应用

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',

    创建的数据迁移

     执行python manage.py makemigrations,Django会在app/migrations/目录下生成移植文件blogmigrations001_initial.py和blog2migrations001_initial.py

     因为刚刚我们创建的那个模型,我们没有给它添加主键。于是Django呢帮我们创建了这么一个字段用来当做我们这个模型的主键。所以呢如果我们自己手动添加主键,这个id呢也就不会自动生成了。这个id还是挺好用的。

    # Generated by Django 2.0.5 on 2018-05-18 14:07
    
    from django.db import migrations, models
    
    
    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='Article',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('title', models.CharField(default='Title', max_length=32)),
                    ('content', models.TextField(null=True)),
                ],
            ),
        ]
    # Generated by Django 2.0.5 on 2018-05-18 14:07
    
    from django.db import migrations, models
    
    
    class Migration(migrations.Migration):
    
        initial = True
    
        dependencies = [
        ]
    
        operations = [
            migrations.CreateModel(
                name='Article',
                fields=[
                    ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                    ('title', models.CharField(default='Title', max_length=32)),
                    ('content', models.TextField(null=True)),
                ],
            ),
        ]

    生成的数据表的SQL语句是可以看的。

    这个文件id就是0001或者是0002这些。

    使用Django默认的sqlite3数据库

    这个就是我们的数据库sqlite3

    大部分都是Django自动生成的数据表。前面的blog前缀是Django自动添加的。rowid是这个软件自动加的一个东西。第二个id就是我们的主键。

     

    Django的模板语言不但支持字符串之类的那种传统的数据传递,也支持这种对象的传递。

    blogviews.py

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.shortcuts import render
    
    # Create your views here.
    
    #from django.shortcuts import render
    from django.http import HttpResponse
    from . import models
    def index(request):
        #return HttpResponse('Hello, world!');
        #return render(request,'index.html',{'hello': 'Hello,Blog'})
        article = models.Article.objects.get(pk=1)
        #return render(request, 'blog/index.html')
        return render(request, 'blog/index.html',{'article':article})

    blog2views.py

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    from django.shortcuts import render
    
    # Create your views here.
    from . import models
    def index(request):
        #return render(request, 'blog2/index.html')
        article = models.Article.objects.get(pk=1)
        return render(request, 'blog2/index.html',{'article':article})

    后台代码我们就写完了

    刚才传递了这么一个对象article到前端模板,而在模板中调用实例成员的方法和后台是一样的,就用这个.操作符。

    blogindex.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <!--
    <h1>Hello,Blog</h1>
    -->
    <!--
    <h1>Hello,Blog! </h1>
    -->
    <h1>{{ article.title }}</h1>
    <h3>{{ article.content }}</h3>
    </body>
    </html>

    blog2index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <!--
    <h1>Hello,Blog</h1>
    -->
    <!--
    <h1>Hello,Blog2!</h1>
    -->
    <h1>{{ article.title }}</h1>
    <h3>{{ article.content }}</h3>
    </body>
    </html>

    这个就是Django的模型models的一些基本用法。

  • 相关阅读:
    NanoProfiler
    NanoProfiler
    Open Source Cassandra Gitbook for Developer
    Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
    Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
    Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
    Android Fragment使用(一) 基础篇 温故知新
    Set up Github Pages with Hexo, migrating from Jekyll
    EventBus源码解析 源码阅读记录
    Android M Permission 运行时权限 学习笔记
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/9058081.html
Copyright © 2011-2022 走看看