django 学习笔记2
创建项目BookManager: django-admin startproject BookManager
settings.py : 是项目的整体配置文件
urls.py : 是项目的URL配置文件.
manage.py : 是项目运行的入口, 指定配置文件路径
创建应用Book: python manage.py startapp Book
admin.py : 是后台的站点管理注册文件
migrations : 是做模型迁移的
新增的应用需要到setting.py中去注册
运行服务:python manage.py runserver 172.16.21.25:8001
模型属性值不允许使用连续的下划线,因为Django的查询语法就是连续的下划线
编写完模型类之后,生成迁移文件:python manage.py makemigrations
执行迁移文件生成表:python manage.py migrate
创建外键:book_people = models.ForeignKey('BookInfo', on_delete=models.CASCADE)
=========字段
AutoField:自动增长的IntegerField,通常不用指定
不指定时Django会自动创建属性名为id的自动增长属性
BooleanField:布尔字段,值为True或False
NullBooleanField:支持Null、 True、 False三种值
CharField(max_length=字符长度):字符串
参数max_length表示最大字符个数
TextField:大文本字段,一般超过4000个字符时使用
IntegerField:整数
DecimalField(max_digits=None,decimal_places=None):可以指定精度的十进制浮点数
参数max_digits表示总位数
参数decimal_places表示小数位数
FloatField:浮点数
DateField[auto_now=False, auto_now_add=False]):日期
参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
参数auto_now_add和auto_now是相互排斥的,组合将会发生错误
TimeField:时间,参数同DateField
DateTimeField:日期时间,参数同DateField
FileField:上传文件字段
ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片
============
在setting.py文件里包含着整个项目的总体配置。可以在里面设置本地化语言和时间。
创建管理员账户: python manage.py createsuperuser
管理后台地址:http://127.0.0.1:8000/admin 即可(记得后缀加admin)
若想在界面上管理模型,则需要在app的admin.py中注册模型:admin.site.register(BookInfo)
Django后台管理是可以自定义管理页面 :
在setting.py 中配置数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'Bookdb', # 数据库名称
'HOST': 'localhost', # 数据库主机
'PORT': '3306', # 数据库端口
'USER': 'root', # 数据库用户名
'PASSWORD': 'mysql', # 数据库密码
}
视图函数必须带一个参数request
转换器是什么呢?简单来说就是能够路由提取的参数 。
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/',
views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/',
views.article_detail),
]
/articles/2003 不会匹配任何项,因为每一个匹配需要在最后加一个斜杠
若想在管理员界面管理模型,则需要先注册模型,如
from .models import JupyterResourceRecord #TODO admin.site.register(JupyterResourceRecord)
视图集中的action与http请求的对应关系:
启动工程
django-admin startproject myproject
创建应用
django-admin startapp boards
在settings.py的INSTALLED_APPS中注册应用
连数据库:python manage.py dbshell
============
- vlaues -
- 单条记录 -
<class 'dict'>
- 多条记录 -
<class 'django.db.models.query.QuerySet'>
- 单条记录 -
- vlaues_list -
- 单条记录 -
<class 'tuple'>
- 多条记录 -
<class 'django.db.models.query.QuerySet'>
- 单条记录 -
ipList = EmployeeIP.objects.values("IP").first() print(type(ipList)) # <class 'dict'> print(ipList) # {'IP': '192.168.1.41'}
ipList = EmployeeIP.objects.values_list("IP")[0:2] print(type(ipList)) # <class 'django.db.models.query.QuerySet'> print(ipList) # [('192.168.1.41',), ('192.168.1.44',)]
获取指定字段:ret = EvaluationAppl.objects.filter(team_id=1301).values("submit_id","submit_id","score")
解决 django 中 mysql gone away 的问题:from django.db import close_old_connections
参考链接:https://zhaojames0707.github.io/post/django_mysql_gone_away/
action=“.”用于显示当前表单的提交地址,这里表示的是当前地址,即调用此模板的视图函数所对应的 URL 。
{% csrf_token %}在表单中是必不可少的,不写在这个位置也行,只要在<form>语句里面即可
但对于 MIDDLEW:成E 读者或许没有关注,现在就看看它,其中有一个参数 django.middleware.csrf.CsrfViewMiddleware,有了这个中间件,就能保证
叫django 免受csrf攻击了。如果前端通过 POST 方式提交数据,就会被禁止,而 POST 数据又是必不可少的,解决方法之一就是在表单中使用{% csrf_token %},与表单内容一同被提交
在 INSTALLED_APPS 的列表中发现 django.contrib.auth 应用就是 Django 默认(内置)的用户权限管理应用
django。contrib.auth应用创建的表以auth作为前缀,其中auth_user里是用户表
可以用is_anonymous()来区分登录用户和未登录用户,
在模版中可以通过 request.user 得到用户对象 , user.is_authenticated 则是返回用户登录的状态,已
经登录返回 True,否则返回 False