• Django基本知识


    Django的开发优势

    • Django可以自动实现web应用的通用功能,减少程序开发的代码量,不重复造轮子。
    • Django可以快速构建高性能、安全、可维护、界面优秀的网站,程序开发人员只需要关注应用程序业务逻辑代码的实现,而不需要重新开发web应用的通用功能。
    • Django功能完备,提供了开箱即用的功能,有完善的ORM、强大的路由映射功能、完善的视图模板的实现、强大缓存支持等。
    • Django能够自动保护网站,避免许多常见的安全错误。默认情况下,可以防范许多漏洞,包括SQL注入、跨站脚本、CSRF、单击劫持等。
    • Django是用python编写的,可以运行在许多操作系统上,可移植性好。
    • Django拥有一个Django Admin管理后台,用户几乎不需要写代码就可以拥有一个完整的后台管理页面。
    • Django通过表单进行数据验证和处理。
    • Django有一个强大的、安全性很高的用户身份验证和权限系统。
    • Django可以轻松实现数据序列化,并且支持XML或JSON格式。

    MTV设计模式

    • MTV设计模式,M是指数据模型Model,T是指模板文件Template,V是指视图函数View以及与它有密切关系的URL配置。
    • 模型用来定义数据结构的类,并提供数据库表管理机制,主要用来定义字段名称、类型、默认值等。
    from django.db import models
    class employee(models.Model):  # 员工数据模型
        name = models.CharField(max_length=32, verbose_name='姓名')
        email = models.EmailField(verbose_name='邮箱')
    
    • 1
    • 2
    • 3
    • 4
    • 模板文件一般是HTML格式,用来定义文件的结构或布局,使用占位符表示相关内容,通过视图函数提取数据模型的数据填充HTML文件的占位符,可以动态创建页面。
    • 视图函数是用来处理web请求的函数,接收HTTP请求,经过处理后返回HTTP响应。URL配置建立URL与视图函数对应关系,主要是根据浏览器的URL,把HTTP请求重定向到对应的视图函数进行处理。
    # views.py
    from django.http import HttpResponse
    # 视图函数必须结束一个HttpRequest对象作为参数并返回HttpResponse对象
    def hello(request):
        return HttpResponse('Hello World!')
    
    # urls.py
    from django.contrib import admin
    from django.urls import path
    from . import views
    urlpatterns = [
        path('admin/', admin.site.urls), # 参数分别表示URL表达式,views.py中的函数名称
        path('hello/', views.hello),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Django的主要文件

    • urls.py是进行URL配置的文件,是网址入口,建立URL表达式与视图函数的关系。
    • views.py是视图函数存放模块,处理用户发出的请求。
    • models.py是数据模型,定义数据表结构,是数据库操作的基础。
    • forms.py是表单定义文件,通过表单及字段属性设置,生成页面文本框,对用户提交的进行验证。
    • templates文件夹中的文件是模板文件,是视图函数渲染改造的对象,一般是HTML文件。
    • admin.py是管理后台配置文件,经过简单的配置代码,就能让数据库数据进行管理。
    • settings.py是配置文件,可以设置应用程序模块、数据库类型、中间件等。
    • apps.py是应用程序本身的配置文件。
    • tests.py是用来编写单元测试代码的文件。

    Django开发流程

    • 部署开发环境;
    pip install django
    
    • 1
    • 创建项目和应用程序;
    django-admin startproject django_demo
    # 一个项目下可以有多个应用程序并实现不同功能,各个应用程序模块共享项目的配置环境
    cd django_demo
    python manage.py startapp myapp
    
    • 1
    • 2
    • 3
    • 4
    • 编写业务逻辑代码;
    # 在myapp中的views.py增加视图函数
    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    
    # Create your views here.
    def index(request):
        return HttpResponse('

    Hello World!

    '
    ) # 向HTML文件传递参数可以使用render函数 def test(request): hi = '从你的全世界路过' test = '这是一首简单的小情歌' return render(request, 'test.html', {'hi': hi, 'test': test}) def login(request): if request.method == 'GET': return render(request, 'login.html') else: username = request.POST.get('username') password = request.POST.get('password') if (username == 'test' and password == '123'): return redirect('/test/') else: return render(request, 'login.html', {'error': '用户名或密码错误!'})
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 建立URL与视图函数的对应关系;
    # 在django_demo中的urls.py中配置URL
    from django.contrib import admin
    from django.urls import path
    from myapp import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/', views.index),
        path('test/', views.test),
        path('login/', views.login),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 创建模型;
    # 在models.py中添加新的数据模型
    from django.db import models
    
    # Create your models here.
    class UserInfo(models.Model):
        user = models.CharField(max_length=32, verbose_name='姓名')
        email = models.EmailField(verbose_name='邮箱')
    
        def __str__(self):
            return self.user
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 动态加载HTML页面;
    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>测试模板title>
    head>
    <body>
        <div>
            <h1>{{ hi }}h1><hr>
            <h2>{{ test }}h2>
        div>
    body>
    html>
    
    <!-- 创建登录页面login.html -- >
    DOCTYPE html>
    
    {% load static %}
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>登录页面title>
        
        <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.2.0/css/bootstrap.min.css" rel="stylesheet">
    
    head>
    <body>
        <div class="container">
            <form action="" class="form-signin" method="post">
                
                {% csrf_token %}
                <h2 class="form-signin-heading">请登录h2>
                <p>p><p>p>
                <label for="username" class="sr-only">用户名label>
                <input type="text" id="username" name="username" class="form-control" placeholder="用户" required autofocus>
                <p>p><p>p>
                <label for="password" class="sr-only">密码label>
                <input type="password" id="password" name="password" class="form-control" placeholder="密码" required>
                <p>p><p>p>
                <button class="btn btn-lg btn-primary btn-block" type="submit">登录button>
            form>
        div>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 根据项目实际情况设置settings.py;
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'myapp', #models.py中有了代码后,必须要注册应用程序myapp
    ]
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            # 修改DIRS,配置templates路径
            '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',
                ],
            },
        },
    ]
    
    # 配置mysql数据库
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': 'myapp',
            'USER': 'root',
            'PASSWORD': 'root',
        }
    }
    
    # 配置静态文件存放位置,添加STATICFILES_DIRS
    STATIC_URL = '/static/'
    STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
    
    # 设置时区
    LANGUAGE_CODE = 'zh-hans'
    TIME_ZONE = 'Asia/Shanghai'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 做好数据库连接与操作;
    # 在django_demo的__init__.py中指定以pymysql模块替代MySQLdb模块
    import pymysql
    pymysql.install_as_MySQLdb()
    
    • 1
    • 2
    • 3
    • 配置后台管理界面显示;
    from django.contrib import admin
    from .models import UserInfo
    
    # Register your models here.
    # 自定义数据模型在管理后台的显示样式
    class UserInfoAdmin(admin.ModelAdmin):
        list_display = ('user', 'email') # 在后台列表显示那几个字段
        
    admin.site.register(UserInfo, UserInfoAdmin)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 启动应用程序。
    # 完成数据表创建,打开operations.py中把query.decode改成encode函数
    python manage.py makemigrations
    python manage.py migrate
    # 创建管理员
    python manage.py createsuperuser
    # 启动程序
    python manage.py runserver
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    五年前,我写错了一道面试题。
    第五章 数据库设计和事务 ② 代码
    红队隧道加密之OpenSSL加密反弹Shell(一)
    深入探究Spring自动配置原理及SPI机制:实现灵活的插件化开发
    Go-Windows环境的快速搭建
    CDGA|到底怎么才能做好数据治理呢?
    电商数仓整体理解
    缓存的设计
    AcWing 4. 多重背包问题 I 学习笔记
    yarn container的进程以及kill动作的逻辑
  • 原文地址:https://blog.csdn.net/dolly_baby/article/details/126753818