Django 0.2
一. 登录功能的实现
1. form表单提交数据的注意事项:
1. 是form不是from,必须要有method和action
2. 所有获取用户输入的表单标签要放在form表单里面,表单标签(input,select)必须要有name属性
3. form表单必须要有submit按钮
2. GET和POST
用GET: 向服务端请求一个网页的时候;搜索引擎检索时
用POST: 使用表单向服务器提交数据时
3. request.method --> 获取的是你请求的方法(GET/POST...)
# 返回的GET,POST都是大写的,所以在编写业务逻辑时,必须大写!!!
4. request.POST --> 获取POST提交过来的全部数据(字典)
# ps request.POST的格式{'name':[], 'password': []}. 可以根据[key]的形式取value,但推荐用.get(),这样没有的话,返回None,不报错。
5. redirect --> 跳转到指定页面!!!
# 当浏览器解析到3**时,直接向redirect的url发请求,不会继续解析。
总结: 基础必会三件套
from django.shortcuts import HttpResponse,render,redirect
a. HttpResponse("OK")
b. render(request, "login.html")
c. redirect("URL")
6. app: app之于project,相当于学院之于学校;一个学校可以有多个学院;当项目较大时,推荐将不同的文件放入不同的app中
创建APP:
a. 在pycharm中的terminal中
python3 manage.py startapp app01
# /usr/local/bin/python3.6 manage.py startapp app01
b. 在项目创立初期,在application中填写app01
c. Tools -> Run manage.pyTask -> startapp app01
创建好APP,记得告诉Django, 我有这个app:
在settings.py中,
# 安装的app都有哪一些
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
# 'app01.apps.App01Config', # 推荐这一种,不过目前两种方式都可以
]
推荐将函数放到app01下的views.py中
7. 如果出现forbidden,去settings.py中将46行附近的csrf相关行注释掉
二. ORM(对象关系映射)
1. 复习导入pymysql模块,操作数据库数据
import pymysql
conn = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
password="123",
database="day62",
charset="utf8"
)
cursor = conn.cursor()
cursor.execute("select * from user;")
ret = cursor.fetchall()
2. 用orm操作数据库(相当于导入jQuery,用jQuery语句($("#id"))替代原生sql语句( document.getElementById(id)))
数据表 --对应--> 类
数据行 --对应--> 实例对象
字段 --对应--> 属性
3. 代码操作数据库的方式比较;
直接执行SQL
优点:执行效率高
缺点:开发效率低
按照特定的语法写,翻译成SQL语句再去执行
优点:开发效率高
缺点:执行效率低,你会忘记SQL语句
总结:ORM和原生的SQL语句,根据具体的应用场景自行取舍。
4. 不同框架用不同的orm
e.g. sqlAlchemy (Flask的orm)
三. Django里面的ORM的使用:
1. 告诉Django连接那个数据库 (在settings.py的databases中配置mysql)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db1', # 哪个database
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123',
}
}
2. 告诉Django怎么连接
Django默认使用的是MySQLdb模块 连接数据库, 但MySQLdb不支持python3。所以,要告诉Django用pymysql这个模块去连接MySQL
在settings.py同目录下的__init__.py文件中,指定使用pymysql模块代替MySQLdb
import pymysql
pymysql.install_as_MySQLdb()
3. 在app/models.py文件中定义类
一定要继承models.Model
4. 执行创建表的操作(在pycharm的terminal中键入)
1. python3 (/usr/local/bin/python3.6)manage.py makemigrations --> 将models.py的修改登记到小本本上
2. python3 (/usr/local/bin/python3.6)manage.py migrate --> 将修改翻译成SQL语句,去数据库执行
亦可: Tools -> Run manage.pyTask -> manage.py makemigrations;manage.py migrate
5. 编辑表
a. 在pycharm中的Database中(若没有,view-> tool buttons), + -> data source -> mysql -> download missing driver files -> test connection
添加数据后,找绿色向上箭头保存
b. navicate
c. cmd中sql语句
四. 常规步骤
1. 在models中建立一个类
2. 在urls中加上对应关系
3. 在views中添加该函数
4. 在templates中创建该html文件
五. 图书管理系统(项目)
1. 表结构设计
1. 出版社
2. 书
3. 作者
2. Django的模板语言
{% for publisher in publisher_list %} # 注意{%中间没有空格
<tr>
<td>{{ publisher.id }}</td>
<td>{{ publisher.name }}</td>
</tr>
{% endfor %}