美文网首页
基于Django的动态交互网站的后台开发

基于Django的动态交互网站的后台开发

作者: Yating_Yang | 来源:发表于2017-04-22 22:23 被阅读2626次

    本文的实践都是在Windows平台下,请参考以下文章来安装Django。以下练习是基于我做的一个Report Server的简化版,我把最核心的操作都提炼出来,希望对大家有用。
    练习题目:case是数据库中的一张表,有两列,分别为case name,case result。建立一个网站,可以在网页中显示出数据库中case的信息,还可以通过case name

    http://www.jianshu.com/p/c6dfc12fa72e
    练习小提示:

    1. 所有带有python manage.py XXX 的命令都得在新建工程的第一级目录下执行,也就是你运行这个命令必须该目录下有manage.py。下面的练习中如果运行这些命令有问题,请查看路径。

    一 新建一个 django project

    在Windows cmd中运行下面的命令,建立一个名叫mysite的project。

    cd C:\
    
    django-admin startproject mysite
    
    新建一个 django project.png

    可以看mysite的目录如下,都是默认生成的文件。这里,主目录是mysite,下一级还有一个mysite。在下面的操作中,要注意是在第一级还是第二季的mysite中,这里容易出错。

    Django新建工程目录结构图.png

    二 新建 app

    cd C:\mysite
    python manage.py startapp case
    

    一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。本文的练习中只需要用到一个app。

    三 将app添加到setting.py

    将我们新建的应用case添加到 settings.py 中的 INSTALLED_APPS中,也就是告诉Django有这么一个应用。
    如下所示,加入'case', 到INSTALLED_APPS.

    # Application definition
    
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'case',
    )
    
    将case添加到setting.py.png

    四 数据库建模

    Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。
    如下代码所示,建立了一个class为case,有两个成员属性是name和result。这个类在数据库中就对应了一张表。

    from django.db import models
    
    # Create your models here.
    # below code is related to my example
    class case(models.Model):
        name = models.CharField(max_length=10)
        result = models.CharField(max_length=10)
    
        def __str__(self):
            return '%s %s' % (self.name, self.result)
    
        class Meta:
            db_table = 'case'
    

    五 Django数据库配置(Optional)

    本文的数据库使用默认的数据库 SQLite3,无需配置。如果你需要用MySQL,可以修改setting.py 的配置如下

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'mostest',
            'USER':'root',
            'PASSWORD':'cisco123',
            'HOST':'10.74.31.149',
            'PORT':'3306',
        }
    

    六 Django 在数据库中生成表

    这里我们进行3个步骤在默认的SQLite3中生成第四步中定义的数据表。

    1. python manage.py makemigrations
    2. python manage.py sqlmigrate case 0001
      这一步是查看SQL的语句,运行该命令就可以显示出来。不懂SQL语句没关系,Django会为你生成命令。
    3. python manage.py migrate
      这一步是真正在SQLite3中建立表case。当你在models.py中新增了类时,运行它就可以自动在数据库中创建表了,不用手动创建。
      下面的代码是我在mac运行以上3步的copy,可做参考。
    YATYANG-M-T02B:mysite yatyang$ python manage.py makemigrations
    Migrations for 'case':
      0001_initial.py:
        - Create model case
    
    YATYANG-M-T02B:mysite yatyang$ python manage.py sqlmigrate case 0001
    BEGIN;
    CREATE TABLE "case" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(10) NOT NULL, "result" varchar(10) NOT NULL);
    
    COMMIT;
    
    YATYANG-M-T02B:mysite yatyang$ python manage.py migrate
    Operations to perform:
      Synchronize unmigrated apps: staticfiles, messages
      Apply all migrations: admin, case, contenttypes, auth, sessions
    Synchronizing apps without migrations:
      Creating tables...
        Running deferred SQL...
      Installing custom SQL...
    Running migrations:
      Rendering model states... DONE
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying case.0001_initial... OK
      Applying sessions.0001_initial... OK
    
    

    下图是在Windows中运行以上三条命令的截图。


    Django在数据库中生成表.png

    七 Django shell操作数据库表

    Django shell提供了丰富的API, 下面演示如何使用它。

    python manage.py shell
    
    

    Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。

    在这个终端可以执行ORM的命令对数据库进行操作。或者直接运行数据库的SQL语句这个不在本文的练习范围内。

    1. 在shell终端导入case类
    from case.models import case
    
    1. 查看数据库中case表的数据,此时数据库中的case表为空。
    case.objects.all() 
    
    1. 在case中添加一条数据。
    c = case(name='live1',result='PASS')
    c.save()
    
    1. 查看case表中的数据以及数据结构等。
    all_case = case.objects.all()
    print all_case
    print all_case[0]
    print type(all_case)
    search_case = case.objects.filter(name='live1')
    
    Django shell操作数据库.png

    八 Django 定义view函数:HTTP GET Request实例

    Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数。我们先来定义我们的view函数。
    view函数中的返回都用json这种格式。
    在view.py中我们会定义两个函数,一个是HTTP GET函数,根据已有的case的name去数据库中查询,并返回相应的结果。
    request.GET.get是获取http url中的query string,就是客服端要传给服务器的参数,比如本例中就是我需要查询case的name是live1,就把live1传给服务器。

    from django.http import HttpResponse
    import json
    from .models import case
    
    def get_case(request):
        name1 = request.GET.get('name')
        cases = case.objects.filter(name=name1)
    
        data = []
        for c in cases:
            data.append({'name':c.name, 'result':c.result})
    
        return HttpResponse(json.dumps(data), content_type="application/json")
    
    

    九 Django定义URL.py

    在case文件夹内,创建一个新的urls.py文件,输入以下代码。
    这里有url的正则表达式匹配,我们用最简单的方式,名字全匹配。如果url里面带有get_case名字的就去找view.py中的get_case函数。

    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'get_case', views.get_case, name='get_case'),
    ]
    
    

    我们打开 mysite/mysite/urls.py 这个文件, 添加了最后一行代码。这个是让Django的主urls.py去识别case app中的子urls.py文件。意思是只要url中带有case关键字,就去找case app中的子urls.py文件中查看url匹配策略。

    from django.conf.urls import include, url
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        #new added by yating
        url(r'^case/', include('case.urls')),
    ]
    

    小提示,在case app中,创建一个新的urls.py文件如果文件名写成url.py,看看第十步启动出什么错误啊。

    十 启动Django自带的websever

    启动Django自带的webserver命令如下,由下图所以我的windows平台一开始用8080端口出错,可能是8080被占用了(有可能是我安装的Fiddler占用了8080)。所以换一个端口就启动成功了。

    python manage.py runserver 0.0.0.0:8088
    
    Django webserver启动.png

    十一 验证HTTP GET接口

    打开浏览器,输入以下命令

    http://127.0.0.1:8088/case/get_case?name=live1
    

    返回结果应该如下:

    [{"name": "live1", "result": "PASS"}]
    

    相关文章

      网友评论

          本文标题:基于Django的动态交互网站的后台开发

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