zoukankan      html  css  js  c++  java
  • Django的使用

    Django使用介绍

    1、MTV

    Django中的MTV分别表示models、templates和views。

    models文件主要定义数据库的连接。

    templates文件可以放一些html的模版。

    views文件主要定义处理请求的函数。

    2、安装django(pip安装方式)

    安装pip

    tar zxvf pip-8.1.2.tar.gz
    cd pip-8.1.2
    python setup.py install

    pip安装完成后,可以直接用来安装jdango

    pip install django

    验证是否安装成功,(python中导入django模块,若没提示错误,即表示安装成功)

    >>> import django
    >>> 

    3、创建应用

    创建一个项目

    django-admin startproject sites

    该项目的结构为

    |____sites
    | |______init__.py
    | |____settings.py
    | |____urls.py
    | |____wsgi.py
    |____manage.py

    在该项目中创建一个应用

    django-admin startapp mysite

    该应用目录的结构为

    |______init__.py
    |____admin.py
    |____apps.py
    |____migrations
    | |______init__.py
    |____models.py
    |____tests.py
    |____views.py

    应用已经创建完毕,现在写一个简单的http请求:

    • 1、在views中定义处理请求的函数
    • from django.shortcuts import HttpResponse 
      def index(request): 
          return HttpResponse('ok')
    • 2、在urls中映射url和对应的处理函数
    • from mysite import views 
      urlpatterns = [
       url(r'^index/', views.index),
       ]
    • 3、启动web端
    • python manage.py runserver

    服务端默认会监听8000端口,通过浏览器请求 http://localhost:8000/index即可获得'ok'字符串。

    4、Django中的路由

    路由即将不同url的请求转发给处理该请求的函数,Django中的路由表定义在urls文件中。

    • 动态url

         urls文件的配置

         url中支持正则,(d+)表示获取匹配到的数字。

    urlpatterns = [
        url(r'^index/(d+)/(d+)',views.index),
    ]
    • 变量付值

         (?P<n1>d+)表示将匹配到的值(数字)付给形参n1,然后获取n1的值。

    urlpatterns = [
        url(r'^index/(?P<n2>d+)/(?P<n1>d+)',views.index),
    ]

         view文件的配置

    def index(request,n1,n2):
            n = n1+n2
            return HttpResponse(n)
    •  二级路由(将请求转发到其它app中)

      请求到达project中的urls文件后进行转发,转发至其它app下的urls文件中。

      project中urls文件配置  

    from django.conf.urls import url,include
    from django.contrib import admin
    urlpatterns = [
        url(r'^test1/',include('test1.urls')),  #请求test1时,转发到test1下面的url
        url(r'^test2/',include('test2.urls')),
    ]

         test1中url文件的配置

    from django.conf.urls import url,include
    from django.contrib import admin
    from test1 import views
    urlpatterns = [
        url(r'^home/',views.home), #进行二级匹配,将test1/home的请求转发给home函数处理
    ]

      test1中views文件的配置

    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    
    # Create your views here.
    def home(request):
    return HttpResponse('test1.home')

      test2中urls文件的配置

    from django.conf.urls import url,include
    from django.contrib import admin
    from test2 import views
    urlpatterns = [
        url(r'^home/',views.home),
    ]

      test2中views文件的配置

    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    # Create your views here.
    
    def home(request):
        return HttpResponse('test2.home')

    5、数据库操作

    • 数据库创建

      Django中数据库的配置文件为settings,默认的数据库引擎为 sqlite3。

      Django中是在models文件中创建数据库,通过类创建数据库。创建数据库之前,需要在settings文件中注册一下app。

      如下:

      settings.py中注册test1

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

      models.py中使用类创建数据库

    from django.db import models
    
    # Create your models here.
    
    class UserInfo(models.Model):
        username=models.CharField(max_length=32)
        password=models.CharField(max_length=32)
        age=models.IntegerField()

      生成创建数据库的配置文件

    python manage.py makemigrations

      此时在test1目录下会生成一个0001_initial.py  生成数据库的配置文件

      根据生成的配置文件创建数据库

    python manage.py migrate

      这样,就创建好了数据库。

    • 数据库增、删、改、查

       1、插入数据

      test1-views.py文件定义插入数据的函数

    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    from test1 import models
    
    # Create your views here.
    
    def db_handle(request):
        models.UserInfo.objects.create(username='ahaii',password='123456',age=20)
      
    return HttpResponse('ok')

      也可以将要插入的数据放到字典中

    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    from test1 import models
    
    # Create your views here.
    
    def db_handle(request):
        dic={'username':'ahaii','password':'123456','age':20}
        models.UserInfo.objects.create(**dic)
        return HttpResponse('ok')

      test1-urls.py文件定义请求的url

    from django.conf.urls import url,include
    from django.contrib import admin
    from test1 import views
    urlpatterns = [
        url(r'^db/',views.db_handle),
    ]

      浏览器请求http://localhost:8000/test1/db/时,就会执行views中的db_handle函数,即插入数据。

      2、删除数据

      views.py文件

      删除username为ahaii的用户信息

    def db_handle(request):
        models.UserInfo.objects.filter(username='ahaii').delete()
        return HttpResponse('ok')

      3、修改数据

      views.py文件

      把所有age值改为23

    def db_handle(request):
        models.UserInfo.objects.all().update(age=23)
        return HttpResponse('ok')

      4、查找数据

      views.py文件  

    def db_handle(request):
        models.UserInfo.objects.filter(username='ahaii')
        models.UserInfo.objects.filter(age=23).first()   #查找所有age=23中的第一个
        return HttpResponse('ok')

    一个 UserInfo对象即为数据库中的一条数据。

    6、将后台数据展示在前端页面上

    views.py文件

    def db_handle(request):
        obj=models.UserInfo.objects.all()           #查询的所有数据,每个obj是数据库中的一条数据
        return render(request,'1.html',{'li':obj})  #返回一个html,并将html中的变量使li替换

    在project中创建模版目录templates,并在template中创建1.html文件

    1.html文件

    </head>
    <body>
        <table border="1px">
            <thead>  #设置表头部
                <tr>
                    <th>用户名</th>
                    <th>密码</th>
                    <th>年龄</th>
                </tr>
            </thead>
            <tbody>     
                {% for item in li %}           #li中包含username、password和age
                <tr>
                    <td>{{item.username}}</td> 
                    <td>{{item.password}}</td>
                    <td>{{item.age}}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </body>

    修改settings.py文件,设置存放模版位置'DIRS':(),'

    TEMPLATES = [
    {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [
    os.path.join(BASE_DIR,'templates'),
    ],
    'APP_DIRS': True,
    'OPTIONS': {
    'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    ],
    },
    },
    ]

     7、静态文件设置

    修改settings.py,添加如下

    STATICFILES_DIR=(os.path.join(BASE_DIR,'templates'),
    ) 

    8、通过前端页面添加数据并显示

    post 提交数据,get获取数据。

    若为post方式提交数据,需要修改settings.py文件,将 'django.middleware.csrf.CsrfViewMiddleware', 一行注释掉。

    MIDDLEWARE_CLASSES = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        #'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]

    views.py文件

    def db_handle(request):
        if request.method=='POST':                                             #先判断请求的方法
            models.UserInfo.objects.create(username=request.POST['username'],  #requrst.POST为提交的数据,插入数据库
                                           password=request.POST['password'],
                                           age=request.POST['age'])
        obj=models.UserInfo.objects.all()                                      #获取数据库中的数据
        return render(request,'1.html',{'li':obj})

    1.html文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="test1/db_handle/" method="post">
            <p><input type="text" name="username"></p>
            <p><input type="text" name="password"></p>
            <p><input type="text" name="age"></p>
            <p> <input type="submit" value="提交"></p>
        </form>
        <table border="1px">
            <thead>
                <tr>
                    <th>用户名</th>
                    <th>密码</th>
                    <th>年龄</th>
                </tr>
            </thead>
            <tbody>
                {% for item in li %}
                <tr>
                    <td>{{item.username}}</td>
                    <td>{{item.password}}</td>
                    <td>{{item.age}}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </body>
    </html>
  • 相关阅读:
    模拟105 题解
    模拟104 题解
    模拟103 题解
    模拟102 题解
    python与 Ajax跨域请求
    Django--进阶--中间件的使用
    Django--权限组件
    python 最基本的的单例模型的实现及应用
    Django-数据库访问优化
    Create views of OpenCASCADE objects in the Debugger
  • 原文地址:https://www.cnblogs.com/ahaii/p/5695512.html
Copyright © 2011-2022 走看看