zoukankan      html  css  js  c++  java
  • Django简单数据库交互演示

    官方文档才是最好懂的:官方文档

    首先先回顾一些基础工作

    新建工程:

    django-admin.py startproject mysite
    

      

    创建应用blog:

    进入manage.py同级目录开命令行

    python manage.py startapp blog

    添加应用名到setting.py installed_apps 里

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

     运行命令是

    python manage.py runserver
    

     多的嘛就先不谈了。

    使用models模块在数据库中创建数据表

    首先连接数据库

    在setting里,engine是mysql的默认选项,使用mysql的玩家都用这一条。改一下name,user,password然后就可以试试能不能用了(直接runserver,如果连接不上会报错)。

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'blogs',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }
    

     使用models模块

    在创建的app(blog)下找到models.py,编辑这段代码

    from django.db import models
    
    class Person(models.Model):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=30)
    

     它等价于

    CREATE TABLE myapp_person (
        "id" serial NOT NULL PRIMARY KEY,
        "first_name" varchar(30) NOT NULL,
        "last_name" varchar(30) NOT NULL
    );
    

     我们只需要在确认连接的情况下使用下面两个命令

    python manage.py makemigrations
    python manage.py migrate
    

     就可以在数据库中创建表了。关于其他细节,如field的设置,需参看文档

    实现与数据库的交互  

    从数据库存取数据到展示到前端页面,不得不谈这三个东西。或者说,一个页面通常具有典型的三个组件

    一个模板(template):模板负责把传递进来的信息显示出来。

    一个视图(view):视图负责从数据库获取需要显示的信息。

    一个URL模式:它负责把收到的请求和你的试图函数匹配,有时候也会向视图传递一些参数。

    要想让他们工作起来,方法多种多样。文档上也有不少。

     下面将以一个具体简单的例子来展示他们是如何工作的。当然先展示一发我的目录结构

    我今天就是要展示这个templates下的index.当然这个是创建blog应用后我手动创建的。index写的内容如下

    <p> fuck</p>
    {% for post in blog_list %}
        <h2>{{ post.title }}</h2>
        <p>{{ post.timestamp }}</p>
        <p>{{ post.body }}</p>
    {% endfor%}
    

     用的是html+模板语法。要使它工作,我需要使用view的功能:从数据库获取信息,并干一些其他的事:

    现在假如我的应用下的models是这样写的

    from __future__ import unicode_literals
    
    from django.db import models
    
    # Create your models here.
    #from django.db import models
    from django.contrib import admin
    
    # Create your models here.
    class BlogsPost(models.Model):
        title = models.CharField(max_length = 150)
        body = models.TextField()
        timestamp = models.DateTimeField()
    
    
    class BlogPostAdmin(admin.ModelAdmin):
        list_display = ('title', 'timestamp')
    
    
    admin.site.register(BlogsPost, BlogPostAdmin)
    

    定义的blogpost的功能在前面models里有说明---它是可以用来创建表的

    现在我将它在views里import一下,然后调用.object().all()方法将该表在数据库中的内容全部取出,如下

    from __future__ import unicode_literals
    
    
    from blog.models import BlogsPost
    from django.http import HttpResponse
    from django.template import loader
    
    
    
    # Create your views here.
    def index(request):
        blog_list = BlogsPost.objects.all()
        template = loader.get_template('index.html')
        return HttpResponse(template.render({'blog_list':blog_list}, request))
    

    然后用template模板的方法搞一发这个index.html,使得它结合数据库的内容生成一个纯html文档,让它在需要响应的时候返回。

    现在就到了urls文件发挥作用的时候了

    这个是blog/ulrs下的内容。就是要服务器在收到请求的时候按照views里的index方法来返回

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        url(r'^$', views.index),
    ]
    

     然后在misite/urls里include一下,至于为什么这就涉及到urls的用法了。urls相当于一个“路由”,将请求送到相应的方法中去。如下展示的就是mysite/urls

    """mysite URL Configuration
    
    The `urlpatterns` list routes URLs to views. For more information please see:
        https://docs.djangoproject.com/en/1.11/topics/http/urls/
    Examples:
    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
    Including another URLconf
        1. Import the include() function: from django.conf.urls import url, include
        2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
    """
    from django.conf.urls import url,include
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^blog/',include('blog.urls')),
    ]

    之后runserver

    用浏览器访问127.0.0.1:8000/blog,就可以看到index页面的结果了 

  • 相关阅读:
    使用百度字体编辑器删除不必要字体,减少字体文件体积
    使用npm安装webpack失败时,可能被墙要为cmd命令行设置代理
    让字体图标代替雪碧图,减少请求带宽
    隐藏浏览器原生的滚动条
    台式机安装CentOS7.6 Minimal ISO系统并增加图形化桌面
    像我这样笨拙地生活(廖一梅)--节选
    随心随意亦舒经典语录
    file / from install of XXX conflicts with file from package filesystem-XXX
    nginx代理php项目的websocket
    Redis4配置文件详解
  • 原文地址:https://www.cnblogs.com/bitch1319453/p/7537888.html
Copyright © 2011-2022 走看看