• Django 文件说明!


    Django文件说明:

    xiangmu
    ├── idea               # pycharm环境
    ├── manage.py          # 管理文件
    ├── templates          # html 样式目录
    ├── static			   # 静态目录
    ├── app01              # 代码规范
    	├──  templatetags  #自定义过滤器
    └── xiangmu            # 项目目录
        ├── __init__.py  
        ├── settings.py    # 配置
        ├── urls.py        # 路由 --> URL和函数的对应关系
        └── wsgi.py        # 代替socket通信,把请求相关的内容封装成request对象
    

    HTML目录:

    templates:

    在进行复制页面拷贝body和head到html,将路径都修改为静态路径

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    	#bootstrap.css
        #login.css 都通过静态名进行引用
        <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
        <link rel="stylesheet" href="/static/css/login.css">
    </head>
        
    <body>
         <div class="container">
            # form表单设置
            # action提交的地址默认当前地址,method默认get请求,post提交,required=""必须要填写
            # novalidate添加后不会校验
            # 设置数据通过post返回给后端,设置返回地址和提交方式action="" method="post" 
            # email和password分别设置username和password输入值
            
          <form class="form-signin" action="" method="post">
            <h2 class="form-signin-heading">Please sign in</h2>
            <label for="inputEmail" class="sr-only">Email address</label>
            <input type="email" name="username" id="inputEmail" class="form-control" placeholder="Email address" required="" autofocus="">
            <label for="inputPassword" class="sr-only">Password</label>
            <input type="password" id="inputPassword" name="password" class="form-control" placeholder="Password" required="">
            <div class="checkbox">
              <label>
                <input type="checkbox" value="remember-me"> Remember me
              </label>
            </div>
            <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
          </form>
    
        </div> <!-- /container -->
    </body>
    </html>
    

    表格交互

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
        <link rel="stylesheet" href="/static/css/biaoge.css">
        <style>
                table{
            font-family: 新宋体;
            font-size: 20px;
            text-align: center;
            line-height: 70px;
            }
            a{
                display: inline-block;
                 60px;
                height: 50px;
                line-height: 50px;
                color: #e2e2e2;
                border-radius: 10px;
                background-color: #009688;
            }
            #dd{
                font-size: 20px;
                text-align: center;
                line-height: 50px;
                }
            th{
                text-align: center;
                font-size: 25px;
            }
            td{
                text-align: center;
                font-size: 25px;
            }
    
            .waihe{
                margin: 0 auto;
                 1915px;
            }
        </style>
    </head>
    
    <body>
        <div class="waihe">
            <a id="dd" href="/publisher_add/">添加</a>
    
            <table border="1" class="table table-striped">
                <thead>
                    <tr>
                        <th>序号</th>
                        <th>ID</th>
                        <th>出版社名称</th>
                        <th>操作</th>
                    </tr>
                </thead>
    
                <tbody>
                    {% for publisher in all_publisher %}
    
                        <tr>
                            <td >{{ forloop.counter}}</td>
                            <td >{{ publisher.pid}}</td>
                            <td >{{ publisher.name}}</td>
                            <td >
                                <a href="/publisher_del/?pk={{publisher.pid}}">删除</a>
                                <a href="/publisher_edit/?pk={{publisher.pid}}">编辑</a>
                            </td>
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </body>
    </html>
    

    表单交互:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
        <style>
            .waike{
                margin: 0 auto;
                 500px;
            }
            p{
                font-weight:700;
                font-size: 20px;
            }
            form{
                font-family: 新宋体;
                font-size: 20px;
                line-height: 50px;
            }
        </style>
    </head>
        
    <body>
        <form action="" method="post">
           <div class="waike">
                <p>班级:<input type="text" class="form-control" name="class_name" value="{{name}}">
                          <span style="color: red">{{error}}</span>
                </p>
    
                <p>老师:<input type="text" class="form-control" name="class_laoshi" value="{{laoshi}}"></p>
                <p>课程:<input type="text" class="form-control" name="class_keming" value="{{keming}}"></p>
                <p>周期:<input type="text" class="form-control" name="class_zhouqi" value="{{zhouqi}}"></p>
                <button class="btn btn-success  btn-lg">添加班级数据</button>
                <a class="btn btn-info btn-lg" href="/class_list/" role="button">返回首页</a>
            </div>
        </form>
    </body>
        
    </html>
    

    静态目录:

    创建static静态目录:

    css       # 样式
    img       # 图片
    js        # javascrip文件
    plugins   #js bootstrap引用的css文件存放位置
    

    css文件示例:

    body {
      padding-top: 40px;
      padding-bottom: 40px;
      background-color: #eee;
    }
    
    .form-signin {
      max- 330px;
      padding: 15px;
      margin: 0 auto;
    }
    .form-signin .form-signin-heading,
    .form-signin .checkbox {
      margin-bottom: 10px;
    }
    .form-signin .checkbox {
      font-weight: normal;
    }
    .form-signin .form-control {
      position: relative;
      height: auto;
      -webkit-box-sizing: border-box;
         -moz-box-sizing: border-box;
              box-sizing: border-box;
      padding: 10px;
      font-size: 16px;
    }
    .form-signin .form-control:focus {
      z-index: 2;
    }
    .form-signin input[type="email"] {
      margin-bottom: -1px;
      border-bottom-right-radius: 0;
      border-bottom-left-radius: 0;
    }
    .form-signin input[type="password"] {
      margin-bottom: 10px;
      border-top-left-radius: 0;
      border-top-right-radius: 0;
    }
    

    app01-代码规范:

    创建app:python manage.py startapp app01 manage.py是管理项目的脚本文件

    • app01目录下文件自动生成

      migrations  # 创建mysql数据的迁移文件  
      admin.py    # django admin管理后台,对数据库表进行增删改查操作
      apps.py	    # app的信息
      models.py   # 模型 om跟数据库相关
      tests.py    # 测试使用
      views.py    # 视图,写函数
      

    views.py-url 页面判断对应的函数

    from django.shortcuts import HttpResponse,render,redirect
    from app01 import models  #打开数据库类进行调用
    
    def index(request):    	  #接受参数
        return HttpResponse("登录成功")             #返回字符串
    
    def home(request):
        return render(request,'home.html')        #访问home目录,跳转到路径
    
    def login(request):
        if request.method == "GET":
            return render(request, 'login.html')   #返回登录页面
        if request.method == "POST":
            user = request.POST.get("username")    #获取提交的数据
            pwd = request.POST.get("password")
    		
    	# ret = models.User.objects.get(username="user",password="pwd")    #找不到或者一个都报错
            ret = models.User.objects.filter(username=user,password=pwd)   #找不到对象列表
            if user == "haiyang" and pwd == "123":
                return redirect("/index/")         #效验成功 跳转到首页(重定向)
            else:
                return redirect("/login/")         #效验失败,返回登录页面
    

    models.py 命令存放

    • 数据库命令存放位置

      python manage.py makemigrations  # 记录models.py文件更新状态
      python manage.py migrate         # 执行数据库的迁移命令,将sql语句提交到数据库中
      
      

    • 创建表和字段

      from django.db import models
      
      class Publisher(models.Model):                   #Publisher:表名,继承models.Model类
          pid = models.AutoField(primary_key=True)     #自增、主键
          name = models.CharField(max_length=32,unique=True)  #约束唯一
      
        def __str__(self):
              return "{}{}".format(self.pid,self.name)  #返回给调用者内容
      
      

    项目文件:

    manage.py:

    • 管理配置文件

    __init__:

    #使用pymysql模块连接mysql数据库
    import pymysql
    pymysql.install_as_MySQLdb()
    
    

    settings.py 配置文件:

    • 配置文件主要包含
      • 设置主机访问权限
      • 数据库连接配置
      • html存放位置
      • 静态文件(css,js,img)存放位置
    import os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  #项目路径
    
    SECRET_KEY = '0s=cn7g2p!xbd)m&6ew)!ltcf!&=t#c&=tiu*l35vt#ir5@)mz'
    
    DEBUG = True   		     #debug模式,前端页面会显示错误提示,关闭则不显示
    
    ALLOWED_HOSTS = ['*']    #设置主机权限
    
    #django默认注册的app
    INSTALLED_APPS = [          
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',    #sessions使用app中必须要有
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01.apps.App01Config']  #注册一个新的app,推荐写法
    
        
    MIDDLEWARE = [    #中间件
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',   #中间件中也要有session
        'django.middleware.common.CommonMiddleware',
        #'django.middleware.csrf.CsrfViewMiddleware',  #提交post请求,校验功能关闭,登录403问题
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    ROOT_URLCONF = 'xiangmu.urls'   #路由配置文件
    
    #存放html模板文件
    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',
                ],
            },
        },
    ]
    
    WSGI_APPLICATION = 'xiangmu.wsgi.application'
    
    
    #数据库配置
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  #使用mysql数据库
            'NAME': 'haiyangdb',   # 库名称
            'HOST': '127.0.0.1',   # 地址
            'PORT': 3306,          # 端口
            'USER': 'root',        # 账号
            'PASSWORD': '123'      # 密码
        }
    }
    
    AUTH_PASSWORD_VALIDATORS = [
        {
            'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
        },
    ]
    
    LANGUAGE_CODE = 'en-us'  #'zh_Hans' admin中可以修改为中文,默认英文
    TIME_ZONE = 'UTC'        #'Asia/Shanghai'  修改时区
    USE_I18N = True
    USE_TZ = True
    APPEND_SLASH=True
    
    USE_L10N = False   # 时间配置
    DATETIME_FORMAT = 'Y-m-d H:i:s'
    DATE_FORMAT = 'Y-m-d'
    TIME_FORMAT = 'H:i:s'
    
    
    #静态路径配置和别名  
    STATIC_URL = '/static/' 			  #静态别名,样式 js 图片都是静态文件
    
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'static'),   #设置静态路径
        os.path.join(BASE_DIR,'x1'),       #可以设置多个图片路径,调用时都使用static就可以
        os.path.join(BASE_DIR,'x2') 	   #如果图片重名只会拿到第一个(列表顺序)
    ]
    
    
    #在python中打印sql语句
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    }
    
    
    from django.conf import global_settings  #django默认全局配置
    
    

    urls.py 路由:

    • 路由中常用参数和方法:

      #查看请求类型和数据类型
          print(request.method,type(request.method))  #查看get请求
          print(request.POST, type(request.POST))     #查看post请求
      
      #参数:
          HttpResponse("欢迎光临")       返回字符串
          render(request,'home.html')   返回目录跳转到路径 示例:
          redirect("/login/")			  跳转到本地目录或者跳转URL
      
      

    • URL和函数对应关系

      from django.conf.urls import url
      from django.contrib import admin
      from app01 import views
      
      urlpatterns = [                                #调用配置文件
          url(r'^admin/', admin.site.urls),
          url(r'^index/', views.index),
          url(r'^home/', views.home),
          url(r'^login/', views.login),
          url(r'^publisher_add/',views.AddPublisher.as_view() )  #调用类名
      ]
      
      

    wsgipy 通信:

  • 相关阅读:
    固态硬盘和机械硬盘的比较和SQLSERVER在两种硬盘上的性能差异
    带您理解SQLSERVER是如何执行一个查询的
    SQL Server 2000中的并行处理和执行计划中的位图运算符
    SQL2005解密已经被加密的存储过程
    使用SQLServer 2008的CDC功能实现数据变更捕获
    like语句百分号前置会使用到索引吗?
    再说一下表分区
    SQLSERVER中的元数据锁
    验证非法电话号码
    OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中
  • 原文地址:https://www.cnblogs.com/haiyang11/p/11394933.html
Copyright © 2020-2023  润新知