#介绍

#文档

#注意事项

# 为保证计算机能正常运行django项目 计算机需要满足一下要求
#   1.计算机名称不能有中文
#   2.一个窗口一个项目
#   3.项目里所有的文件不要用中文
#   4.python解释器尽量使用3.4~3.6之间版本

# django版本
# (1.x, 2.x, 3.x)

#安装

python3 -m pip install Django
# 镜像下载
pip install Django -i https://mirrors.aliyun.com/pypi/simple/
django-admin  # 终端命令判断是否安装成功

#开始

一、命令行创建项目

# 1.创建项目
django-admin startproject mysite

# 文件目录
mysite目录
    manage.py  # django入口文件
    mysite目录
        __init__.py
        settings.py  # 项目配置文件
        urls.py  # 路由层
        wsgi.py  # wsgiref模块

# 2.运行项目
cd mysite
python3 manage.py runserver ip:port  # 默认ip端口为127.0.0.1:8000

# 3.创建应用
#       django是专门用来开发app的web框架
#       一个app是一个独立功能
python3 manage.py startapp app01  # app名见名知意
# 文件目录
mysite目录
    manage.py          # django入口文件
    mysite目录
        __init__.py
        settings.py    # 项目配置文件
        urls.py        # 路由层
        wsgi.py        # wsgiref模块
    db.sqlite3         # django自带数据库(小 bug多)
    app01目录
        admin.py       # django后台管理
        apps.py        # 注册使用
        migrations目录  # 数据库迁移记录
        models.py      # 模型类(orm)
        test.py        # 测试文件
        views.py       # 视图层
# 4.注册应用
#       创建出来的app要去配置文件文件中注册
#       INSTALLED_APPS = [
#           'app01.app.App01Config',  
#           # 或者简写 'app01'
#]

二、vscode配置

  • 1.安装Django插件



  • 2.创建项目
ctrl`
django-admin startproject test  # 创建test项目
cd test                         # 进入test目录
python -m venv env              # 创建虚拟环境

进入虚拟环境 选择python解释器(./env/bin/python3)

  • 3.在虚拟环境中安装django
pip install -i https://mirrors.aliyun.com/pypi/simple django
pip list  # 查看当前虚拟环境中安装了哪些模块
  • 4.django项目启动文件创建
  • 5.运行
  • 6.运行成功


三、创建应用

# 在test项目目录下    
django-admin startapp hello     # 创建hello应用(app)
# 添加路由关系
# test/test/urls.py



# 添加视图函数
# test/hello/views.py
# views.py中的视图函数必须接受request形参



# 运行
# 浏览器访问: http://127.0.0.1:8000/hello/

#django小白必会三板斧

# 1.返回字符串     HttpResponse('str')
# 2.返回html页面   render(request, 'test.html')
#       传递参数   render(request, 'test.html', {'name': 'turbo', 'age': 20})
#                 render(request, 'test.html', locals())  '''将名称空间中的所有变量传递给html页面'''
# 3.重定向        redirect('https://www.baidu.com')  跳转自己的页面只写后缀即可

#template模板

  • 安装django模板插件


  • 创建模板目录
  • 修改配置文件
# 创建的项目不会自动生成templates模板目录
# 需要手动创建并修改配置文件(test/test/settings.py)
# 先导入os模块(import os)
'DIRS': [os.path.join(BASE_DIR, 'templates')],
  • html代码自动补全功能
// test/.vscode/setting.json 大括号中添加下面内容
"files.associations": {  // 文件联想
    "*.html": "html"
}

#静态文件配置(登录功能)

  • 静态资源
# html文件默认放在templates目录下
# 网站所使用的静态文件放在static文件下
#     静态文件: 可以直接使用, 不用再修改的(js文件; css文件; 图片文件)
# - static目录
#     - js目录
#     - css目录
#     - img目录
#     - other目录
  • 创建目录
  • 静态资源配置
# test/test/setting.py
# 末尾添加
'''
# 静态文件配置
STATICFILES_DIRS = [
    BASE_DIR / "static",
    # 或者
    # os.path.join(BASE_DIR, 'static')
]
'''
STATIC_URL = '/static/'
# 访问静态资源的令牌 
# 要想访问资源必须以/static/开头 
# 然后去STATICFILES_DIRS列表中查找文件
# 找不到报错

# 静态文件配置
STATICFILES_DIRS = [
    BASE_DIR / "static"
]
  • 静态文件动态解析
# test/templates/login.html
<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>Document</title>
    {% load static %}
    <link href="{% static 'path(eg:img)' %}" rel="stylesheet">
    <script src="{% static 'path(eg:img)' %}"></script>
</head>

# 能够动态解析STATIC——URL的值
STATIC_URL = '/static/'
  • 代码
# test/hello/views.py
def login(request):
    return render(request, 'login.html')

# test/test/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', views.hello),
    path('login/', views.login)
]

# test/templates/login.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>Document</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.3/js/bootstrap.min.js"></script>
</head>
<body>
    <h1 class='text-center'>LOGIN</h1>
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <form action="">
                    <p>username: <input class="form-control" type="text", name="username"></p>
                    <p>password: <input class="form-control" type="password" name="password"></p>
                    <input type="submit" class="btn btn-success btn-block">
                </form>
            </div>
        </div>
    </div>
</body>
</html>
  • post请求
# 修改form表单提交方法 method='POST'
# test/test/setting.py 注释一行代码('django.middleware.csrf.CsrfViewMiddleware',)
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',
]

#request对象

# <WSGIRequest: GET '/login/'>
# 将请求来的数据封装成request对象
# 有很多简易的方法

1. .method

# 返回请求方式 全大写的字符串
# request.method
# GET  \  POST

2. .POST

# request.POST  
# 获取用户POST请求数据 不包含文件
<QueryDict: {'username': ['turbo'], 'password': ['123']}>
# 返回的是一个字典 键取决与表单的name属性
request.POST.get('username')      # get只会获取列表最后一个元素
request.POST.getlist('username')  # getlist获取整个列表

3. .GET

# request.GET
# 获取用户get请求数据(url中问号后面的参数) 不包含文件
request.GET.get('username')      # get只会获取列表最后一个元素
request.GET.getlist('username')  # getlist获取整个列表

# get请求的携带的数据有限制(约等于4kb)
# post请求的数据大小没有限制(可以携带文件)

#PS

# 修改文件之后 项目自动重启
# 设置浏览器 当打开开发者工具时 禁止缓存