Django
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
django的安装
pip install Django
pip install Django = 2.2.3
新版本
开发服务器
python manage.py runserver
python manage.py runserver 0.0.0.0:8000
自定义访问者ip和开放端口
manage.py的源码理解,把settings路劲作为系统环境变量注入,sys.arv搜集命令行参数,最终交给cmdline函数运行。
得到:
基本项目结构介绍:
manage.py 命令行工具,负责运行、负责运行、创建子模块等功能,跟django-admin。
mysite 跟项目同名的子包
mysite/settings 工程项目设置文件。数据库、时区、语言等,方便其他地方调用。
mysite/urls.py url路由,指向不同的视图函数。
mysite/wsgi 通用网关。部署时间到。
创建项目
安装Django后会一并安装ajango-admin.exe的命令行公
- cd 到放项目的目录下
- django-admin startproject [project name]
- python manage.py startapp polls
关于app
python manage.py startapp [appname]
project VS apps , django项目里的app并不是我们平时所说的应用。一个项目、一个应用在project,django框架中的app是一个更小级别的划分,代表一个大模块。
比如大型项目教育网站,权限、学生、教室、后台,每个大模块下有几十个页面功能。都写在一起脚本太大不好维护,所有django小项目可以一个模块,大项目可以按逻辑分为多个app(子应用)。
目录:
app/migrations:数据库迁移桥本
admin.py 自带的后台配置文件,快捷实现表CRUD
models.py 定义数据库表结构
tests.py 单元测试
views.py 功能逻辑,渲染页面
修改文件自动重启dajango de开发模式自动重启服务
1.在views.py文件里导入
2.创建视图
3.设置子url
4.响应流程图
在浏览器中输入http://127.0.0.1:8000/polls/index/
获取polls中的内容
整体流程
客户端发起请求
全局urls(项目同名包下的) 查询指向视图或子app下的url
app下子url继续匹配,成功匹配指向视图函数
视图函数进行业务逻辑处理,返回http响应信息
浏览器加载响应html代码,看到结果
http://127.0.0.1:8000/polls/index/
-------ip和端口 ------全局url子url*
在终端中创建库
show variables like ‘character%’;
报错
1.启动服务 unicodeDecodeError: utf-8 can not
原因 源代码gethostaddr() , windows默认编码gbk,计算机名为中文会导致报错。 解决,我的电脑右键属性修改计算机名为英文。
2.404,url找不到
原因url配置错误。
分析,观察报错url规则,看目录层级,url正斜杠。
浏览器请求的url配置文件里的匹配规则正斜杠结尾。
3.套接字无权限操作
原因。某些软件占用了8000端口
解决,解说软件或更改服务端口
配置settings.py
mysql连用户名 密码。项目大型后悔有很多配置,如果写在每一个py脚本中将代码。解决方案是在 py .json 配置文件声明键值对变量。其他各个py脚本变量
配置变量习惯上全大写字母命名。
数据库配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
默认sqllite,其他mysql,posrgressql
其它,详见settings.py注释
迁移
1.model.py 用类的方式定义表的结构。
2.想要使用和生成表结构的app需要先加入到settings中的installed_apps
3.生成sql python manage.py makemigrations [app_name]
,生成的迁移脚本在migrations文件夹下。
4.执行sql python manage.py migrate
5.成功后会在数据库中看到生成的表。django_migrations表记录迁移的过程
可能报错:
- makemigration,显示 no changes 说明mofel.py没有新变化。
2.db.sqlite3 后缀无所谓,本质都是数据库,但跟txt不同,有自己的规则,必须由驱动生成,不能直接在pycharm中new。django 初始migrate迁移内置app时会初始化。 - socket没权限,
ORM
文档位置 模型层 - supported database . http://d.u753mysql,
mysql:
1.官方推荐驱动mysqlclient
'pip install mysqlclient ’
2.缺点字符集为utf-8
登录mysql客户端 show varibles like 'character%';
主要看sever database两个变量的值。
3.DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 'NAME':'my_mysql_instance', 'USER':'root', 'PASSWORE':'56tyghbn', 'HOST':'127.0.0.1', 'PORT':'3306', 'OPTIONS': { # 'read_default_file': '/path/to/my.cnf', }, }
关于django的网址
https://www.v2ex.com/t/581284
http://d.u753.com/index.html django中文文档
文档位置 模型层-supported database ,http://d.u753.com/ref/databases.html
配置settings-database http://d.u753.com/ref/settings.html#std:setting-NAME
https://blog.csdn.net/w18211679321/article/details/82709460 django2.2暂时不支持mysql8.0加密方式
https://www.cnblogs.com/rinka/p/django_make_queries_anout_built-in_lookups.html django查询总结
http://d.u753.com/intro/tutorial02.html 中文版