zoukankan      html  css  js  c++  java
  • django初始化

    Django

    版本

    安装

    pip安装

    pip install django 安装最新版本的
    pip install django==1.11.11 安装指定版本的
    

    验证安装

    直接去代码中调用django的模块

    import django
    print(django.get_version())
    
    1.11.11
    

    或者命令行使用

    django-admin
    

    创建项目

    命令行注意要在文件相对应的目录创建文件

    创建django项目
    django-admin startproject zx1  
    启动django项目-测试服务器,压力很小,500左右
    python manage.py runserver ctrl+c关闭
    创建应用app
    python manage.py startapp app01
    

    注意

    1.新创建的命令行新建的app需要自己去setting文件中注册

    2.pycharm只会帮你注册第一个你用pycharm创建的应用

    django目录

    mysite
    	mysite				Python包
    		__init__.py		项目可以作为包
    		settings.py		全局设置文件
    		apps            配置当前app的,暂时用不到
    		urls.py			全局路由控制
    		wsgi.py			wsgi服务器的配置文件(高并发的)
    	manage.py			Djago项目管理
    

    app目录

    app
    	__init__.py		项目可以是一个包
    	admin.py		数据库如果希望被后台看到,需要在这个文件注册
    	models			创建该APP可能使用到的数据库
    	test			测试
    	views			实现对应业务的函数
    

    配置全局路由

    1.x是相当于2.x的re_path,是可以支持正则匹配的路由

    2.x的path是不支持正则的

    url(r'',zx1_views.index)
    

    数据库生成命令

    创建默认数据库,每次修改models.py数据模型,都要执行下面两句

    python manage.py makemigrations 检查数据库差异(同步),生成迁移文件(migrations)
    python manage.py migrate 根据迁移文件生成对应的SQL语句
    

    创建admin用户

    python manage.py createsuperuser
    

    setting配置

    时区和语言设置

    LANGUAGE_CODE = 'zh-Hans'
    TIME_ZONE = 'Asia/Shanghai'
    
    #如果要操作数据库,记得把下面置为False,否则不会使用以上配置的时间,操作数据库
    USE_TZ = False
    

    配置app

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

    app-url配置

    django
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'zx',zx1_views.index),
        url(r'app01',include('app01.urls')),
        # url('app01',include('app01.urls',namespace='app01'))
    ]
    
    app
    urlpatterns = [
        url(r'login/',views.login)
    ]
    

    配置数据库-mysql

    主要注意

    1.在django orm中没有char字段,但是django暴露给用户可以自定义char字段的功能

    2.增加字段,如果数据库已经有数据,需要给新增的字段添加默认值,或者设为空(default,null=True)

    __init__.py django默认使用MYSQLdb,但是该模块不兼容,不推荐使用
    所以告诉django回去使用pymysql模块连接数据库
    使用pymysql代替MYSQLdb
    import pymysql
    pymysql.install_as_MySQLdb()
    
    DATABASES = {
        'default':{
            'ENGINE':'django.db.backends.mysql',
            'NAME':'zx2',
            'USER':'root',
            'PASSWORD':'root',
            'HOST':'127.0.0.1',
            'PORT':3306,
            'CHARSET':'UTF8'
        }
    }
    
    id = models.AutoField(primary_key=True) 在django中,可以不指定主键字段 
    django orm会自动给当前表新建一个名为id的主键
    

    页面资源配置

    pycharm自己会创建
    
    手动在项目下创建一个templates文件
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
     
    return render(request,'login.html')
    

    模板渲染

    <h1><span>{{date}}</span>欢迎来到登录界面</h1>
    
    today = datetime.datetime.now()
    content = {'date':today}
    return render(request,'login.html',content)
    
    模板语法
    变量相关:{{}}
    逻辑相关:{%%}
    

    静态资源

    用户能在浏览器中输入网址访问到相应的资源,前提是后端暴露了该资源的接口

    创建static静态资源文件夹
    STATIC_PATH = os.path.join(BASE_DIR,'static')
    STATICFILES_DIRS = (
    	真实的
        STATIC_PATH,
    )
    
    虚拟的
    STATIC_URL = '/static/' 访问静态资源的前缀,可以更改,但是要和html的对应
    
    #引用 动态的和STATIC_URL相互对应
    {% load staticfiles %}
    <img src="{% static 'img/Mysql.jpg' %}" alt="">
    

    CSRF

    跳过csrf
    1.{% csrf_token %}在from表单中加
    2.# 'django.middleware.csrf.CsrfViewMiddleware',在setting中注释
    

    媒体文件配置media

    新建文件夹

    media

    setting

    # 媒体文件配置
    MEDIA_URL = '/media/'
    # media文件夹的绝对路径
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    

    url

    from django.views.static import serve
    from django.conf import settings
    # 在总路由的最下方对外开放media接口
    url(r'media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT})
    

    ORM执行查看原生SQL的两种方法

    1.在setting中配置

                LOGGING = {
                    'version': 1,
                    'disable_existing_loggers': False,
                    'handlers': {
                        'console': {
                            'level': 'DEBUG',
                            'class': 'logging.StreamHandler',
                        },
                    },
                    'loggers': {
                        'django.db.backends': {
                            'handlers': ['console'],
                            'propagate': True,
                            'level': 'DEBUG',
                        },
                    }}
    

    2.如果查询的结果是queryset对象可以.query查看命令

    只要是queryset对象就可以无限制的点queryset对象的方法,queryset.filter().filter().filter()

    搭建django-ORM测试环境

    from django.test import TestCase
    import os
    # Create your tests here.
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "zx1.settings")
        import django
        
    
        django.setup()
        from app01 import models
        # 你就可以在下面测试django任何的py文件
        
    

    返回数据

    三板斧

    from django.shortcuts import render,HttpResponse,redirect
    HttpResponse  # 返回字符串的  
        
    render  # 返回html页面 
          
    redirect  # 重定向
    
    返回的其实都是HttpResponse对象
    

    request

    获取post请求的数据
    request.POST
    
    获取get请求携带的数据
    request.GET
    
    request.POST.get('username') 默认只取数据列表最后一个元素
    如果想要取出所有的元素,就必须使用getlist()
    
  • 相关阅读:
    mysql max_allowed_packet过小导致的prepare失败
    linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解
    mysql metadata lock锁
    velocity merge作为工具类从web上下文和jar加载模板的两种常见情形
    mysql 5.7.15发布
    mysql 5.6.33发布
    2016年09月编程语言排行榜
    postgresql 9.6 rc1发布
    www.97top10.com--做最好的技术交流网站
    nginx/ajax跨子域请求的两种现代方法以及403解决
  • 原文地址:https://www.cnblogs.com/zx125/p/11716065.html
Copyright © 2011-2022 走看看