django基础
目录
与浏览器打交道的视图函数都应该有返回值
- HttpResponse:返回字符串类型的数据
- render:返回html文件,并且支持模板语法
- redirect:重定向,括号内可以写其他网站的全称,也可以自己网站的后缀
登录功能
- 开设接口返回登录界面
- 登录界面需要使用bootstrap并且还需要自己编写css和js(静态文件)
- 页面需要获取前端用户数据并且传递给后端:form表单
- 访问登录页面:静态文件全部显示资源不存在,因为我们并没有开设静态资源访问的接口
- 开设静态资源的访问接口:settings.py
静态文件资源访问接口固定配置
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ]
配置文件中的两点疑惑
/static/是接口前缀,表示具备访问静态文件资源的权限, 具备了权限之后会拿着接口前缀后面的文件路径去列表中每个文件夹中查找
{% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
静态文件
编写完成后不会经常被修改的与html页面相关的文件
提交post请求:默认会报403
配置文件中注释一行
MIDDLEWARE = [ # 'django.middleware.csrf.CsrfViewMiddleware',]
get请求和post请求都会触发同一个视图函数login的运行
get请求返回一个登录页面;post请求获取用户数据并校验
获取当前请求方式
request.method:返回的是纯大写的请求方法字符串
获取post请求提交的普通数据
request.POST:结果是一个QueryDict 可以看成字典处理
- request.POST.get('username')
- request.POST.getlist('hobby')
get方法会拿到值列表中最后一个元素,而不是整个列表
getlist方法会直接拿到整个值列表
如何获取url后面携带的数据
request.GET:结果是一个QueryDict 可以看成字典处理
- request.GET.get('info')
- request.GET.getlist('cityList')
特征与上述request.POST一致,使用场景也很多
pycharm也可以充当很多数据库软件的客户端:database
链接数据库
- 选择数据库
- 首次链接需要下载驱动:download driver...
- 测试链接如果不通过,则需要换驱动重新下载使用
django默认自带一个sqlite3数据库,但是功能很少,仅用于本地测试
默认配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
修改配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'shun01', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '******', } }
指定模块
在项目同名的文件夹内的__init__.py或者应用名的文件夹内的__init__.py添加一行固定的代码
import pymysql pymysql.install_as_MySQLdb()
ORM:对象关系映射
特点
能够让不会写SQL的python程序员使用python语法就可以直接操作MySQL,提升了开发效率,封装了SQL语句,有时候可能效率不高,还需要人为编写SQL调优
概念
- 表 类
- 一行行数据 类产生的一个个对象
- 数据字段 对象的一个个属性
如果需要使用ORM,需要去应用下的models.py中编写代码
编写类代码
class Users(models.Model): uid = models.AutoField(primary_key=True) # 等价于uid int primary key auto_increment name = models.CharField(max_length=32) # 等价于name varchar(32) pwd = models.IntegerField() # 等价于pwd int
执行数据库迁移命令
python manage.py makemigrations:记录操作
python manage.py migrate:将操作迁移到数据库
首次执行迁移命令,django还会自动创建一些默认需要使用到的表
表名的特征
app01_users:由于django支持多个应用,为了区分不同应用下可能会出现相同的表名,所以自动加上了应用的前缀,因为同一个应用下不可能出现相同的表名
扩展
- 表的主键可以不写,orm会自动帮你写一个名为id的主键
- 每次修改了跟数据库相关的python代码,都需要重新执行迁移命令
- 针对两个迁移命令,可以采用pycharm提示功能编写:tools>>>run manage.py task
user_obj = models.Users.objects.create(name='jack', pwd='333') print(user_obj) print(user_obj.uid) print(user_obj.name) print(user_obj.pwd)
查
res = models.Users.objects.filter(name='jason') print(res) # <QuerySet [<Users: Users object>]> print(res[0]) # Users object print(res[0].uid) # 1 print(res[0].name) # zhou print(res[0].pwd) # 123
改
models.Users.objects.filter(uid=1).update(name='shunNB')
删
models.Users.objects.filter(uid=3).delete()