django的基本使用
ORM框架(django内置ORM框架)
-
ORM框架可以将类和数据表对应起来,只需要通过类和对象就可以对数据表进行操作;根据设计的类生成数据库中的表。
模型类
- 模型类定义在models.py文件中,继承自models.Model类。
from django.db import models
class UserInfo(models.Model):
user_name= models.CharField(max_length=5)
def __str__(self):
return self.user_name
- 生成迁移文件命令:
python manage.py makemigrations
- 根据迁移文件创建表:
python manage.py migrate
数据表名默认为<app_name> _<classname>
定义属性
属性=models.字段类型(选项)
字段类型
使用时需要引入django.db.models包,字段类型如下:
- 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,对上传的内容进行校验,确保是有效的图片。
选项
通过选项实现对字段的约束,选项如下:
- null:如果为True,表示允许为空,默认值是False。
- blank:如果为True,则该字段允许为空白,默认值是False。
- db_column:字段的名称,如果未指定,则使用属性的名称。
- db_index:若值为True, 则在表中会为此字段创建索引,默认值是False。
- default:默认值。
- primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。
- unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。
后台管理
- 本地化
修改settings.py
LANGUAGE_CODE = 'zh-hans' #使用中国语言
TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
2.创建管理员
python manage.py createsuperuser
3.注册模型类
在admin.py中注册模型类
from django.contrib import admin
from app_name.models import UserInfo
admin.site.register(UserInfo)
4.自定义后台管理
- 属性list_display表示要显示哪些属性
class UserInfoAdmin(admin.ModelAdmin):
list_display = ['user_id', 'user_age']
视图
1.定义视图函数
from django.http import HttpResponse
def helloworld(request):
return HttpResponse("helloworld")
2.配置URLconf
- 在app里新建urls.py
from django.conf.urls import url
from app_name import views
urlpatterns = [
url(r'^$', views.index), # 严格匹配开头和结尾
]
- 配置项目的urls文件
url(r'^', include('app_name.urls')),
- 首先在项目的urls文件进行匹配,成功后去掉匹配字符串,剩余字符串再去对应的app里urls文件进行匹配。
- 配置url有两种语法格式:
a)url(正则表达式,视图函数名)
b)url(正则表达式,include(应用中的urls文件))
模板
1.创建模板
- 在项目文件夹下创建templates文件夹。
- 项目settings文件中,TEMPLATES = [{'DIRS':[ os.path.join(BASE_DIR,'templates')]}] ,设置模板文件目录。
- 为了应用之间模板文件不混淆,每个app在templates文件夹下创建一个文件夹,在对应文件夹下添加html文件。
2.定义模板
<html>
<head>
<title>用户列表</title>
</head>
<body>
<h1>{{title}}</h1>
{%for i in list%} # 在模板中编写代码段语法 {%代码段%}
{{i}}<br> # {{i}} 定义变量名 i ,变量可能是从视图中传递过来的,也可能是在模板中定义的。
{%endfor%}
</body>
</html>
3.视图调用模板
- 加载模板文件
- 定义模板上下文(向模板传递数据)
- 模板渲染
from django.shortcuts import render
# 方法render包含3个参数:
# 第一个参数为request对象
# 第二个参数为模板文件路径
# 第三个参数为字典,表示向模板中传递的上下文数据
def index(request):
context={'title':'用户列表','list':range(10)}
return render(request,'app_name/index.html',context)
- 模板语言
# 1.模板变量:{{变量}}
# 2.标签:
# for标签语法如下:
{%for item in 列表%} # 循环逻辑
{{forloop.counter}} # 表示当前是第几次循环,从1开始
{%empty%} # 列表为空或不存在时执行此逻辑
{%endfor%}
# if标签语法如下:
{%if ...%}
# 逻辑1
{%elif ...%}
# 逻辑2
{%else%}
# 逻辑3
{%endif%}
# 3.比较运算符:运算符左右两侧不能紧挨变量或常量,必须有空格。