创建app (添加到installed apps)
python manage.py startapp test_worm
依赖文件生成
pip freeze > requirements.txt
依赖文件安装
pip install -r requirements.txt
添加静态资源,在settings.py中最后一行添加
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) # 开发时创建的静态目录
创建表
python manage.py makemigrations
python manage.py migrate
对queryset进行序列化
from django.core import serializers
serializers.serialize('json', queryset)
开启项目远程访问
1 开启mysql数据库远程访问:
新建查询
mysql> use mysql;
Database changed
mysql> grant all privileges on *.* to root@'%' identified by "root";
2 让别人通过IP访问我的电脑(服务器必须开启):
在settings.py中加入 ALLOWED_HOSTS = ['*'] # 我的电脑的ip地址
数据库改为宿主数据库地址 'HOST': '192.168.16.198',
3 找到项目中manage.py的位置,打开命令行运行以下命令
python manage.py runserver 0.0.0.0:8000
##面向对象
- 面向对象基本特征(封装,继承,抽象,多态)(了解)
- 类Class和实例Instance
- 类是抽象的模板
- 实例是根据类创建出来的一个个具体的“对象“
- 类的定义:通过 class 关键字
- 实例: 根据类创建
- 函数
- 用来实现某个功能的,可重复使用的代码块
- 内建函数
- 自定义函数:
- 函数代码块以 def 关键词开头,后接函数标识符名称 和 圆括号 ()
- 传入参数和自变量必须放在圆括号中间
- 内容以冒号起始,并且缩进
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
- 一般格式:
def 函数名(参数列表): 函数体
- 调用
六个标准的数据类型
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
-
数字(Number),数字数据类型用于存储数值
- 整型
- 浮点型
- 复数(不管)
- 类型转换
-
字符串(String)
- 定义
- 格式化 :% 运算符
- 长度:len(str)
- 常用函数:注意返回值
- 是否以字符串str1开头:
str.startswith('str1')
, - 字符串拼接,
- 是否包含特定字符:find()
- 字符串分割: split
- 是否以字符串str1开头:
-
列表List
- 定义
- 常用操作:
- 访问或更新列表中的值(索引)
- 添加元素: append() 在末尾添加新的对象
- 插入元素:指定索引 insert(index,obj)
- 删除元素(按索引) del list[index]
- 长度
- 元素是否存在于列表中
- 迭代 (循环)
-
元组Tuple(了解)
-
字典Dictionary
- 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式:
d = {key1 : value1, key2 : value2 }
- 键必须是唯一,不可变的,如字符串,数字或元组;
- 值则不必:可以取任何数据类型,
- 常用操作:
- 访问字典元素
- 清空字典
- 判断某键值是否存在于该字典中:
key in dict
- dic.keys(); dic.values() 返回字典的键/值 列表
- dic.items() 列表返回可遍历的(键, 值) 元组数组
- 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式:
-
集合Set(了解)
- 一个无序不重复元素的序列
- 使用set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
- 常用操作:添加add(),取长度,清空,判断元素是否存在
七种运算符
- 算术运算符
- 比较运算符
- 赋值运算符
- 逻辑运算符
- 位运算符(不搞)
- 成员运算符
- 身份运算符(了解)
条件控制
- if elif else
循环,迭代
- for item in data:
Django web 基础
django web应用目录结构
- manage.py : 运行django项目并用于管理任务的命令行工具
- static 目录:存放app运行所需的静态文件,一般为js和css,需要自己手动创建,并加载到settings.py配置中
- templates 目录: 存放app运行所需的html页面
- 项目名称下 子文件:
- _init.py 不管
- settings.py :配置项目运行所需的环境,如 数据源,日志,缓存等
- urls.py : 与app目录下views.py形成 视图函数与URL路由绑定
- app名称下 子文件:
- models.py: 存放自定义模型类(与数据库形成orm对象关系映射)
- views.py:
- 定义视图函数,并与项目下urls.py中的url路由进行绑定
- 所有的views函数都需要以request对象作为第一个参数,request代表客户端浏览器向服务器请求的一个信息字符串, views中的函数需要接收这个字符串才行对他进行处理。
- 视图函数返回值类型:
- 返回一个字符串: 调用 HttpResponse()函数
- 返回一个网页: 调用render函数,返回一个html模板文件(接收到一个请求,然后指定好一个html模板,并把上下文context字典中的内容, 加载进templates_name中指定的模板文件, 并通过浏览器渲染呈现.)
- 参数request: 是一个固定参数, 就是指通过接受到的通过wsgi处理过的客户端浏览器请求数
- 参数template_name:templates中定义的HTML文件, 要注意路径比如'templatespollsindex.html', 参数就要写‘pollsindex.html’
- 参数 context: 要传入上下文中用于渲染呈现的数据, 默认是一个字典格式,键即下文html模板中需要被替换的元素,键值即在views视图函数中需要传到html模板中变量需要替换成的值。
- 模板文件中接收传入的context:使用jinja2语言 {{data}}
- 返回重定向 redirect
- 用户自定义函数: 一般封装了视图函数需要调用的某个功能
- 定义视图函数,并与项目下urls.py中的url路由进行绑定
Html基础
标签 :由尖括号包围的关键词,是成对出现的,第一个标签是开始标签,第二个标签是结束标签
- head标签:网页标题(css和js文件引入,自定义样式和js函数)
- body标签内显示的是网页内容
- 我们关注的标签:
- input输入框: 通过id查找到该标签,通过name属性进行前后台数据交互
- form表单:通过method指定数据提交方式,通过action指定提交数据的url,通过类型为submit的按钮指定提交请求事件。
- form表单提交请求的类型:GET和POST,区别,用法
- 样式: 网页显示的效果
- 事件:通过自定义jquery js实现触发
- 前端框架:已经定义好了样式和js事件,用户可选择性调用(需提前引入要用到的css和js文件)
ajax数据交互
- 按钮点击事件执行自定义js函数,在函数体中进行请求参数获取
- 常用写法
- $.ajax({ type: "post", async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行) url: url, //对应urls.py中的url data: {"data": data}, //请求的参数 dataType: "json", //返回数据形式为json success: function (result) { //请求成功,获取到的数据在result中 }, error: function (errorMsg) { //请求失败时执行该函数 } });
总结
一般开发流程
页面ajax请求 --> 后台接收request请求-->获取请求附带参数 --> 将参数作为查询条件请求数据库获取数据-->
数据预处理(重中之重)--> json序列化并返回处理后的数据 -->
ajax请求成功获取result --> 数据解析并渲染页面
数据预处理:
通过循环迭代,将数据库中取出的queryset数据集改造成我们需要的形式
页面接收数据并解析:
将接收到的数据,通过循环迭代,加载到页面上
核心: 数据的处理(流程把握,整体思路)
命名规范(约定) :不使用保留字和关键字
原则:见名知意
文件名 :小写 + 下划线
类名 : 总是使用首字母大写单词串。如MyClass
函数&方法 : 小写+下划线
变量 : 小写,由下划线连接各个单词
代码规范
- 编码
- 文件一律使用UTF-8编码
- 文件头部必须加入#--coding:utf-8--标识
- 代码格式
- 缩进
- 统一使用 4 个空格进行缩进
- 代码里 多数应该使用 单引号
- 文档字符串 (docstring) 使用三个双引号 """......"""
- 缩进
- 注释
- 在代码的关键部分(或比较复杂的地方), 能写注释的要尽量写注释
- 文档注释以 """ 开头和结尾, 首行不换行, 如有多行, 末行必需换行,
Pycharm使用
基本使用:
1. 创建项目:选择解释器project interpreter-选择existing interpreter,点击右边的省略号-选择system interpreter
2. 使用4个空格的tab: 选择file->settings->editor->code style ->选择Python,取消勾选use tab character
3. 取消拼写检查: file->default settings->editor->inspections->spelling取消勾选,python下的pep8取消勾选
4. 代码自动提示 :打开设置,搜索code completion
常用快捷键:
1. ctrl +alt + L 自动格式化代码
2. ctrl +alt + 空格 自动提示代码,查看函数注释信息
3. Ctrl + P 查看参数信息(在方法中调用参数)
4. alt + enter 自动导入包
#end
作业
用户登陆功能实现
- 创建一个django项目,运行该项目并访问项目主页
- 根据视图关系映射,实现功能
- 定义用户登陆视图函数,返回用户登陆页面(配置函数与url对应)
- 创建用户登陆页面,在页面中添加用户登陆表单,参1:用户名,参2:密码
- 定义提交表单动作(执行某函数,并接收页面传递过来的用户名密码)
- 在提交表单动作中判断用户名为abc且密码为123时返回登陆成功页面,否则返回登陆失败页面
新闻头条展示(JSON解析学习)
json怎么用
- JSON 是轻量级的文本数据交换格式,对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用
- JSON 语法规则:
- 数据保存在键/值对中
- 数据由逗号分隔
- 大括号保存对象
- 中括号保存数组
- JSON 对象在大括号({})中书写:对象可以包含多个名称/值对:
- 使用点号(.)或者中括号([])来访问对象的值
- 使用for-in循环,获取对象的属性
- 使用json.loads(str)来解析json字符串
- 使用json.dumps(data)进行对象序列化,便于页面取值
python第三方HTTP请求库requests的使用
- requests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多
- 使用pycharm安装requests库
- 访问http://docs.python-requests.org/zh_CN/latest/user/quickstart.html查看如何发送一个简单的请求;如何在请求中传递参数
- 查看如何获取请求的返回值,正确编码返回的数据
基于用户登陆功能,成功则展示新闻头条,失败则重定向到登陆页面
#####后台部分
- 访问聚合数据官网:https://www.juhe.cn/
- 找到免费数据接口-新闻头条,查看API接口地址,请求方式,请求参数
- 使用提供的API接口测试工具进行测试,查看返回的数据类型及数据格式
- 使用requests库,请求该新闻头条接口
- 接收返回的数据,查看返回的数据格式
- 获取所需要的数据,并使用json解析该数据
- 定义一个data_list数组,用来保存我们需要的数据
- 使用for -in循环,遍历该json解析后的数据,取出我们需要的数据title,date,url,thumbnail_pic_s,并保存到data_list中
- 将组装好的数据重新序列化并返回给成功页面 #####前端页面部分
- 使用模板语言接收后台返回的HttpResponse
从数据库获取数据
安装MySQL数据库
- 将MySQL数据库安装到本地,记住mysql用户名和密码
- 使用导航猫测试是否能成功连接数据库
在django项目中使用数据库
-
修改settings配置数据源为本地数据库
-
使用django自带的数据库管理类from django.db import connection
-
执行sql语句获取查询结果
with connection.cursor() as cursor: cursor.execute(sql) data = cursor.fetchall()