一、Django主要目录结构

  1. ---mysite # 项目文件夹
  2. |--manage.py # django的入口文件
  3. |--db.sqlite3 # django自带的sqlite3数据库(小型数据库 功能不是很多还有bug)
  4. |--mysite # 项目同名的文件夹
  5. |--settings.py # 配置文件
  6. |--urls.py # 路由与视图函数对应关系(路由层)
  7. |--wsgi.py # 启动wsgiref模块(不需要考虑)
  8. |--app01 # app文件夹
  9. |--migrations # 存放ROM针对数据库相关的记录,数据库迁移记录(也可以叫日志)
  10. |--admin.py # django自带的后台管理功能
  11. |--apps.py # 注册使用
  12. |--models.py # 数据库相关的 模型类(orm)
  13. |--test.py # 测试文件
  14. |--views.py # 视图层,该app对应的主题功能(视图函数、视图类)

重要:Django创建app,需要在配置文件内注册

  1. 假如创建了一个app02
  2. 必须在"settings.py"文件内,的INSTALLED_APPS内添加配置信息
  3. INSTALLED_APPS = [
  4. 'django.contrib.admin',
  5. 'django.contrib.auth',
  6. 'django.contrib.contenttypes',
  7. 'django.contrib.sessions',
  8. 'django.contrib.messages',
  9. 'django.contrib.staticfiles',
  10. 'app01.apps.App01Config',
  11. 'app02.apps.App02Config', # 这是全写
  12. # 或者下面的,两者写一个
  13. 'app02' # 这是简写
  14. ]
  15. !!!
  16. 养成一个习惯:
  17. 创建出一个app的时候,第一时间去添加settings的注册配置

二、django小白必会三板斧

  1. 1HttpResponse
  2. return HttpResponse("任意字符串")
  3. # 暂且理解为可以返回给前端浏览器文本类的数据
  4. 2render
  5. return render(request,"[html文件]",{"name_list":["yly","zpx","zpx"]}) # 精准传
  6. return render(request,"[html文件]",locals()) # 范围传,把当前名称空间内所有数据传输过去
  7. # 返回templates/[html文件]
  8. # 支持模板语法,与jinja2不同,作者自己写的
  9. 3redirect
  10. return redirect("http://www.mzitu.com/")
  11. return redirect("/index/") # 可以只写后缀(默认补齐当前IP和PORT)
  12. # 重定向

1、开发修改chrome设置

  1. 开发者在开发web的时候,常常会遇到缓存问题,而来回刷新页面
  2. """
  3. 可以通过:
  4. F12开发者工具,设置禁用缓存,这样在打开F12开发者工具的时候刷新页面,是基于网络访问地址,而不是使用本地缓存。
  5. -->settings
  6. -->networks
  7. -->disable cache
  8. """

不使用缓存 (2).jpg
不使用缓存.jpg

2、静态文件配置

  1. # 什么是静态文件
  2. 不会频繁更改的文件
  3. css文件、js文件、第三方框架文件、图片
  4. # django存储静态文件
  5. static文件夹 # 暂时放在该项目内,不过以后放在nginx内,或者rsync服务器内
  6. 该文件内部还可以依据不同的功能划分不同的区域
  7. css文件夹
  8. js文件夹
  9. img文件夹
  10. others文件夹

2.1 STATIC简介

  1. # 利用django编写用户登录功能
  2. '''为什么前端请求不到后端的框架资源:我们没有开设对应的资源接口'''
  3. 针对静态资源的路径开设无需在urls.py中指定 只需要在settings配置文件指定即可
  4. --------------------------------"settings.py"--------------------------------
  5. # web接口前缀(要想访问静态资源 web路径的前缀就必须是这里指定的)
  6. STATIC_URL = '/static/'
  7. # 将该列表的所有文件夹所有的资源开设给外界
  8. STATICFILES_DIRS = [
  9. os.path.join(BASE_DIR,'static'), # 项目目录下的静态文件夹的名称
  10. os.path.join(BASE_DIR,'static1'),
  11. os.path.join(BASE_DIR,'static2')
  12. ]
  13. ----------------------------------------------------------------------------
  14. html文件的cssjs导入可以写成
  15. <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
  16. 不用写成
  17. <link rel="stylesheet" href="../static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
  18. 原理是:
  19. 查找的时候,网页前缀为static
  20. # 接口前缀动态匹配(在html中写以下语法,自动获取settings的STATIC_URL)
  21. {% load static %}
  22. <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
  23. <script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
  24. ----------------------------------------------------------------------------
  25. 总结:
  26. 当用户输入了"STATIC_URL"开头的接口路径前缀
  27. 就会在"STATICFILES_DIRS"目录下,查找后缀名的文件,
  28. 查找顺序是按照该列表的索引开始查找,也即从索引0开始以此查找
  29. 从上往下依查找对应的资源
  30. 接口前缀正确之后 拿着后面的路径去列表中,找到了就不再继续往下找

2.2 STATIC编程习惯

  1. html需要的静态资源需要引用,直接写为:
  2. /static/xxx/abc.jpg
  3. 当需要扩展静态资源文件夹的时候:
  4. # 修改settings.py的
  5. STATICFILES_DIRS=[
  6. os.path.join(BASE_DIR,'项目内的静态资源文件夹名'),
  7. ]
  8. # 这里其实是拼接项目的目录名,将项目的BASE_DIR和静态资源文件夹名组合

三、网络请求方式

  1. 1.get请求
  2. 朝别人索要数据
  3. eg:浏览器地址栏输入www.baidu.com回车
  4. get请求没有请求体
  5. get请求也可以携带一些的额外的参数 但是大小有限制(2KB)
  6. url?xxx=yyy&aaa=bbb
  7. 2.post请求
  8. 朝别人提交数据
  9. eg:用户注册登录填写完身份数据之后提交
  10. post请求有请求体
  11. post请求也可以携带数据 并且大小没有限制 在请求体中

四、form表单重要参数

  1. action # 控制数据提交的地址
  2. 1.写全路径 https://www.baidu.com
  3. 2.写后缀(ip和端口自动补全当前服务器) /index/
  4. 3.不写 提交给当前页面所在的地址
  5. method # 控制数据提交的方式
  6. get form表单默认是get请求
  7. post
  8. """
  9. 注意使用django前期在提交post请求之前需要去配置文件中注释掉一行代码
  10. MIDDLEWARE = [
  11. # 'django.middleware.csrf.CsrfViewMiddleware',
  12. ]
  13. """

五、requests对象方法

  1. request.method # 获取请求方式名(纯大写的字符串)
  2. request.POST # 获取post请求提交的普通数据
  3. request.POST.get()
  4. request.POST.getlist()
  5. request.GET # 获取get请求url问号后面的数据
  6. request.GET.get()
  7. request.GET.getlist()
  8. def login(request):
  9. if request.method == 'POST':
  10. username = request.POST.get('username') # 默认只会取列表最后一个元素
  11. password = request.POST.get('password')
  12. if username == 'jason' and password == '123':
  13. return HttpResponse('OK')
  14. else:
  15. return HttpResponse('用户名或密码错误')
  16. return render(request, 'login.html')

六、pycharm链接MySQL

  1. database选项
  2. # pycharm有可能会报错
  3. Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon
  4. 解决:
  5. cmd
  6. mysql -uroot -p123
  7. set global time_zone = '+8:00';
  8. show variables like'%time_zone';
  9. 详见:https://blog.csdn.net/liuqiker/article/details/102455077

pycharm连接数据库报错解决.jpg
4、Django总体介绍使用 - 图4

七、django链接MySQL(必会)

  1. # 第一步配置
  2. DATABASES = {
  3. 'default': {
  4. 'ENGINE': 'django.db.backends.mysql',
  5. 'NAME': 'db4_3',
  6. 'USER':'root',
  7. 'PORT':3306,
  8. 'HOST':'127.0.0.1',
  9. 'PASSWORD':'123',
  10. 'CHARSET':'utf8'
  11. }
  12. }
  13. # 第二步配置(3.6及以下解释器 需要额外的配置)
  14. import pymysql
  15. pymysql.install_as_MySQLdb()
  16. '''只要是__init__文件即可 项目的 应用的都可以'''