Python之后端Django(三)
创始人
2024-12-07 05:34:55
0次

Day/3

案例实现:

“创建项目”

  1. 执行cd ~/Desktop/ 将项目创建在桌面上,方便管理

  2. 创建虚拟环境

    1. 查看虚拟环境是否有配置 workon

    2. 创建虚拟环境 mkvirtualenv -p python3 py3_django_12

    3. 生成文件 django-admin startproject bookmanger

    4. 报错的话下载django pip install django==1.11.11

  3. 检查是否创建成功 tree

“创建子应用”

  1. 执行 python manage.py startspp 子应用名称 是在manage.py路径执行

  2. 在pycharm打开工程项目,并配置好环境

“子应用注册”

  1. 在setting.py中的INSTALL_APPS进行注册

“本地化设置”

LANGUAGE_GODE = ‘zh-Hans’ 设置中文

TIME_ZONE = ‘Asia/Shanghai’ 设置亚洲时区

第一次登录后是无账号无密码,需要手动创建,密码长度要8位,且包含数字和字母

注意要先执行数据迁移指令,建表格Day/2中

命令:python manage.py createsuperuser

“项目中匹配的urls”

在Day/2中

“准备视图函数”

在Day/2中

“开启服务器”

  1. python manage.py runserver

  2. 在浏览器地址栏输入地址:http://www.127.0.0.1:8000/子应用名称/index

配置文件与静态文件:

“配置文件”

  1. DEBUG = True

    当程序出现异常时,会显示报错信息,且修改代码后会重启服务

  2. ALLOWED_HOSTS

    循序哪些主机访问项目

  3. BASE_DIR

    1. 通过__file__属性,可以查找当前该模块的文件夹

    2. os.path.abspath(__file__) 获取当前文件夹的绝对路径

    3. os.path.dirname 获取当前文件夹的上一级目录

  4. 本地语言和时区

    LANGUAGE_GODE = ‘zh-Hans’ 设置中文

    TIME_ZONE = ‘Asia/Shanghai’ 设置亚洲时区

“静态文件”

  1. 创建位置:推荐在根路径下,名字固定为static

  2. 哪些文件是静态文件:css图片 js都是静态文件

  3. 配置参数

    1. STATIC_URL = ‘/static/’ 访问静态文件的url的前缀

    1.  存放动态文件的目录 
        'DIRS' : \[os.path.join(BASE.DIR, 'templates')],  2.  存放静态文件的目录   ,注意参数名字固定,不能改!!!      STATICFILES\_DIRS = \[os.path.join(BASE.DIR, 'static')] 

“django是如何区分 动态资源和静态资源”

  1. 核心的参数: STATIC_URL = ‘/static/’

  2. 访问静态文件资源时。遵循一个规则:http://ip:port + /STATIC_URL的值 + /文件名

配置:

连接mysql数据库

1、更改如下:在setting.py文件中

DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql',         # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),         'HOST': '127.0.0.1',         'PORT': 3306,         'USER': 'root',             'PASSWORD': 'mysql',     # 数据库密码         'NAME': 'book'    # 数据库名字     } } 

2、需提前安装好pip install PyMySQL

3、在工程项目的__init__.py文件中写入(不是子应用的__init__.py文件)

import pymysql  pymysql.install_as_MySQLdb() 

作用:

django的ORM能够以musqldb的方式调用pymysql

4、在linux终端进入mysql,创建数据库

1、执行创建命令:create database 数据库名称 charset=utf8;

2、use book;

URLconf:

“重点”

  1. Django默认 127.0.0.1

  2. 以字符串形式加的 当指定ip运行后,是无法访问到后端的!解决思路:需要将运行的域名加到ALLOWED_HOSTS

  3. 它是一种安全机制,即只允许添加进来的主机进行访问

  4. 在ALLOW_HOSTS里添加的多个IP可以同时访问 访问的时候 python manage.py runserver 0:8000

路由URL:

  1. 查找规则从上至下,会有屏蔽效应,解决的方法:正则内最后加个$符号即可,但是一般是在子路由里加,工程总路由不加。

    urlpatterns = [   url(r'say$', views.say),   url(r'sayhello$', views.sayhello), ] 
  2. urlpatterns 是固定写法,不能更改

  3. 推荐在子应用的路由结尾加反斜杠 /

路由命名及reverse反解析:

路由命名产生的原因:

  1. 项目的迭代,可能会导致路由信息需要多次修改,且修改的地方较多

  2. 随着子应用的数量越来越多,在不同子应用中路由使用了相同的名字会发生冲突

“解决办法”

1.在工程路由文件中,namespace参数定义空间

from django.conf.urls import url, include from django.contrib import admin  # 路由 urlpatterns = [     url(r'^admin/', admin.site.urls),     # include函数     url(r'^users/', include('users.urls', namespace='book')), ]  

2.在子应用的路由文件中,name参数给路由起别名

urlpatterns = [   url(r'say$', views.say, name='say'),   url(r'sayhello$', views.sayhello), ] 

3.在视图函数中 使用 reverse函数 动态获取路由信息

from django.urls import reverse url = reverse('book:say') 

reverse反解析:

1、“语法格式”:reverse(‘命名空间namespace:路由别名name’)

2、作用:根据“name”起的别名,动态的获取具体的路由信息

HttpRequest对象:

“利用HTTP协议向服务器传参的途径”

  1. URL路径携带参数,例如https://item.jd.com/324432432.html

  2. 查询字符串传参,例如 ?keyword=平板电脑

  3. 请求体(body)发送数据传参,特征:表单,例如登录界面,注册界面,json,xml

  4. 在HTTP请求头中发送数据传参 不常见,按F12查看Request Headers

“第一种途径:URL路径携带参数”

  1. 它是根据位置传参的,需要一一对应的变量,否则会出现混乱的数据

  2. 缺点:位置限制

优化的思路:关键字传参,他的优点不需要考虑位置,语法格式—>(?P<变量名>\d+)

例子:

from django.conf.urls import url from users.views import lisi  urlpatterns = [     # url(r'^index/(\d+)/(\d+)/$', lisi, name='lisi'),     url(r'^(?P\d+)/(?P\d+)/$', lisi), ] 
from django.shortcuts import render from django.http import HttpResponse from django.urls import reverse # Create your views here.  # 定义一个视图函数 def lisi(request, book_id, category_id):     return HttpResponse('这是第一次写视图函数')     # url = reverse('book:lisi')     # print(url)     print(book_id, category_id)     # 获取数据     username = '紫薇'     # 组织数据     context = {         'username': username,     }     # request对象,模板路径,模板字典数据     return render(request,'index.html',context=context) 

相关内容

热门资讯

查到实测透视挂操作!勇者之心多... 查到实测透视挂操作!勇者之心多功能透视挂软件,勇者之心确实真的是有辅助软件所有人都在同一条线上,像星...
一分钟揭秘透视练习!任丘娱乐多... 一分钟揭秘透视练习!任丘娱乐多功能透视方法,任丘娱乐切实是有辅助方法1)任丘娱乐有没有挂:进一步探索...
揭秘一下辅助器窍要!悦心多功能... 揭秘一下辅助器窍要!悦心多功能辅助器方法,悦心本来是有辅助方法暗藏猫腻,小编详细说明悦心破解器有用吗...
重大通报透视挂讲义!聚旺互娱多... 重大通报透视挂讲义!聚旺互娱多功能透视挂工具,聚旺互娱原来真的有辅助工具1、很好的工具软件,可以解锁...
揭秘真相透视教程书!久盛多功能... 揭秘真相透视教程书!久盛多功能透视app,久盛其实确实有辅助app亲,关键说明,久盛透视脚本安卓赛季...
盘点几款透视法子!兴贝棋牌多功... 盘点几款透视法子!兴贝棋牌多功能透视教程,兴贝棋牌果然存在有辅助教程1.兴贝棋牌 选牌创建新账号,点...
刚刚辅助器办法!欢乐斗牛多功能... 刚刚辅助器办法!欢乐斗牛多功能辅助器工具,欢乐斗牛原来真的有辅助工具1、全新机制【欢乐斗牛ai辅助工...
做出回应透视挂窍要!66红中麻... 做出回应透视挂窍要!66红中麻将多功能透视挂教程,66红中麻将都是确实有辅助教程1、进入到66红中麻...
一分钟了解透视妙招!九九多功能... 一分钟了解透视妙招!九九多功能透视工具,九九总是确实有辅助工具1、完成九九辅助器v3.3的残局,帮助...
2024教程辅助挂手筋!兴贝棋... 2024教程辅助挂手筋!兴贝棋牌多功能辅助挂工具,兴贝棋牌一贯是真的有辅助工具1、用户打开应用后不用...