Django创建项目

Django项目创建

  1. 项目创建

    • django-admin startproject mydemo
  2. 项目结构

    • 树形结构

      $ cd mydemo/
      $ tree
      .
      |-- mydemo
      |   |-- __init__.py
      |   |-- asgi.py
      |   |-- settings.py
      |   |-- urls.py
      |   |-- wsgi.py
      |-- manage.py
      
    • 结构图
      结构图

    • 目录说明:

      • HelloWorld: 项目的容器。
      • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
      • HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
      • HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
      • HelloWorld/settings.py: 该 Django 项目的设置/配置。
      • HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
      • HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
  3. settings.py 文件

    """
    
    Django settings for mydemo project.
    
    Generated by 'django-admin startproject' using Django 3.1.7.《django版本》
    
    For more information on this file, see
    <https://docs.djangoproject.com/en/3.1/topics/settings/>
    
    For the full list of settings and their values, see
    <https://docs.djangoproject.com/en/3.1/ref/settings/>
    """
    
    from pathlib import Path
    
    # Build paths inside the project like this: BASE_DIR / 'subdir'
    
    BASE_DIR = Path(__file__).resolve().parent.parent """《显示当前项目根目录》"""
    
    # Quick-start development settings - unsuitable for production
    
    # See <https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/>
    
    # SECURITY WARNING: keep the secret key used in production secret
    
    SECRET_KEY = 'jb^(bip2g_@%r*5ni-8@#yz%*crzw7sqpq_qcbhw48lgk+ctxo'
    
    # SECURITY WARNING: don't run with debug turned on in production
    
    DEBUG = True
    """
    调试模式开关,默认为True(调试模式)
    为True时:1.检测代码改动后立刻重启服务;2.显示报错页面
    为False时(正式启动模式/上线模式):项目上线时一定要更改为False
    """
    
    ALLOWED_HOSTS = []
    """
    允许的域名,只有列表中添加的域名可以访问服务器,默认会允许127.0.0.1或者localhost访问
    设置为"*":表示允许所有域名访问
    设置当前局域网内域名可进行访问:
    1.项目启动时设置:python manage.py runserver 0.0.0.0:8000
    2.添加局域网IP
    """
    
    # Application definition
    
    INSTALLED_APPS = [
       'django.contrib.admin',
       'django.contrib.auth',
       'django.contrib.contenttypes',
       'django.contrib.sessions',
       'django.contrib.messages',
       'django.contrib.staticfiles',
    ]
    
    MIDDLEWARE = [
       'django.middleware.security.SecurityMiddleware',
       'django.contrib.sessions.middleware.SessionMiddleware',
       'django.middleware.common.CommonMiddleware',
       'django.middleware.csrf.CsrfViewMiddleware',
       'django.contrib.auth.middleware.AuthenticationMiddleware',
       'django.contrib.messages.middleware.MessageMiddleware',
       'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    ROOT_URLCONF = 'mydemo.urls'
    """
    项目主路由位置,默认为项目文件夹下的urls.py
    """
    
    TEMPLATES = [
       {
          'BACKEND': 'django.template.backends.django.DjangoTemplates',
          'DIRS': [],
          '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 = 'mydemo.wsgi.application'
    
    # Database
    
    # <https://docs.djangoproject.com/en/3.1/ref/settings/#databases>
    
    DATABASES = {
       'default': {
          'ENGINE': 'django.db.backends.sqlite3',
          'NAME': BASE_DIR / 'db.sqlite3',
       }
    }
    
    # Password validation
    
    # <https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators>
    
    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',
       },
    ]
    
    # Internationalization
    
    # <https://docs.djangoproject.com/en/3.1/topics/i18n/>
    
    LANGUAGE_CODE = 'en-us'
    """
    主页语言配置,可设置为中文
    LANGUAGE_CODE = 'zh-hans'
    """
    TIME_ZONE = 'UTC'
    """
    时区设置,主要影响数据库时间显示
    TIME_ZONE = 'Asia/shanghai'
    """
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    
    # Static files (CSS, JavaScript, Images)
    
    # <https://docs.djangoproject.com/en/3.1/howto/static-files/>
    
    STATIC_URL = '/static/'
    """
    静态文件路由
    """
    
  4. URL

    • URL 结构:protocol://hostname[:port]/path[?query][#fragment]

    • protocol(协议):

      • http:通过http访问该资源,格式:http://
      • https:通过安全的https:访问该资源,格式:https://
      • file:通过file访问本地的资源,格式:file:///
    • hostname(主机名/域名):

      • 是指存放资源的服务器的域名系统(DNS)主机名、域名或IP地址
    • port(端口):

      • 可选,省略时使用方案的默认端口
      • 各种传输协议都有默认的端口号http:默认是80,https:默认是443
    • path(路由地址):

      • 由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址,路由地址决定了服务器端如何处理这个请求
    • query(查询字符串):

      • 可选,以“?”开头,用于给动态网页传参,可传递多个参数用“&”隔开,参数名和参数值用等号隔开key=value
    • fragment(信息片段):

      • 字符串,以“#”开头,用于指定网络资源中的片段,类似书签,下次访问时带上fragment可直接定位到该片段
    • Django如何处理URL请求

      1. 根据浏览器传过来的URL,django从配置文件中根据ROOT_URLCONF找到主路由文件;默认情况下该路由文件位于同名目录下的urls.py中
      2. django加载主路由中的urlpattern变量,urlpattern是一个包含很多路由的列表
      3. 从上往下依次匹配urlpattern中的path,匹配到第一个满足的path即中断后续匹配
      4. 匹配成功,调用对应的视图函数处理请求,返回对应的响应
      5. 匹配失败,返回404响应
  5. 视图函数

    • 定义:用于接收浏览器请求( HttpRequest对象),并通过HttpResponse对象返回响应的函数

    • 语法:return必须是HttpResponse对象

      def  demoview(request[,其他参数]):
         return HttpResponse('需要返回的数据')
      
    • 示例:
      在项目同名目录下创建views.py

      from django.http import HttpResponse
      def page1_view(requet):
         html = "<h1>hallo world</h1>"
         return HttpResponse(html)
      
    • 添加路由url.py

      from django.contrib import admin
      from django.urls import path
      from . import views
      urlpatterns = [
         path('admin/', admin.site.urls),
         path('page1/', views.page1_view),
      ]
      
  6. 路由配置-path

    • path()函数
    • 导入 from django.urls import path
    • 语法 path(route,views,name=None)
    • 参数:
      • route:字符串类型,匹配的请求路径
      • views:指定路径所对应的视图处理函数的名称
      • name:为地址起别名,在模板中进行地址反向解析时使用
    • path转换器
      • 语法:<转换器类型:自定义名>
      • 作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
      • 例:path('page/<int:page>',views.xxx),如果匹配到page路径后面时int类型,则会将接收到的路径中的数据赋值给变量page,然后以关键值传参的方式传递到视图中
      • 转换器类型作用样例
        str匹配除了‘/’之外的非空字符串”v1/users/str:username“匹配/v1/users/china,匹配结果为:username=china
        int匹配0和任何正整数,返回一个int”v1/users/int:num“匹配/v1/users/35,匹配结果为:num=35
        slug匹配任意有ASCII字母或数字以及连字符和下划线组成的短标签”v1/users/slug:sl“匹配/v1/users/this_is_django,匹配结果为:sl=this_is_django
        path匹配非空字段,包括路径分隔符”/“”v1/users/path:ph“匹配/v1/users/goods/a/b/c,匹配结果为:ph=goods/a/b/c
    • re_path转换器
      • 语法:re_path(reg,view,name=xxx)
        • 正则表达式必须为__命名分组模式__(?P<name>pattern;)匹配成功后用关键字传参的方式传递给视图函数
      • 作用:使用正则进行精确匹配
      • 例:url(r'^weather/(?P<city>[a-z]+)(?P<year>\d{4})/$', views.weather)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值