django前后端交互
Posted shiqu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django前后端交互相关的知识,希望对你有一定的参考价值。
- 创建一个apps
- 在当前项目文件下,启动dos窗口。执行
python manage.py startapp investigate
pycharm->tools->Run mange.py Task...
出现类似于命令行窗口,执行startapp investigate
。
- 配置apps
在settings.py 的 INSTALL_APP配置中指定,在该列表中添加你刚刚新建的app名称。
静态资源导入
- 资源
- template目录中创建html
- 创建static目录,并在该目录中创建css、images、javascript目录
- django提供【django.contrib.staticfiles】来管理静态文件
- 资源配置
settings配置:STATIC_URL/STATICFILES_DIRS
STATIC_URL = ‘/static/‘
STATICFILES_DIRS = [
os.path.join(BASE_DIR,‘STATIC‘)
]
Django的路由功能
- 路由是根据不同的url地址展示不同的内容或页面,一般在【urls.py】中配置访问的URL
EG:
urlpatterns = [
url(r‘^admin‘,admin.site.urls),
url(r‘^form/$‘,inverstigate)#inverstigate为你的路由路径
]
# 具体url配置也可参考urls.py中的注释内容
- Django中的urls和views的关系
- urls中配置的url调用views中的方法
- render函数将想要交给前端的数据,交给模板
创建Model
- 根据业务需求创建名为【UserInfo】的Model
- 【UserInfo】是【investigate】中的一个Model,Model与app为多对一的关系
- 为【UserInfo】创建字段【Field】。
- 常用的字段类型清单
名称 | 说明 |
---|---|
AutoField | 一个自动递增的整型字段,添加记录时它会自动增长。你通常不需要直接使用这个字段;如果你不指定主键的话,系统会自动添加一个主键字段到你的model。(参阅自动主键字段) |
BooleanField | 布尔字段,管理工具里会自动将其描述为checkbox |
CharField | 字符串字段,单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField;CharField有一个必填参数:CharField.max_length:字符的最大长度,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。 |
TextField | 一个容量很大的文本字段, admin 管理界面用 <textarea>多行编辑框表示该字段数据。 |
CommaSeparatedIntegerField | 用于存放逗号分隔的整数值。类似 CharField,必须maxlength 参数。 |
DateField | 日期字段 |
DateTimeField | 类似 DateField 支持同样的附加选项。 |
EmailField | 一个带有检查 Email 合法性的 CharField,不接受 maxlength 参数。 |
FileField | 一个文件上传字段。 要求一个必须有的参数: upload_to, 一个用于保存上载文件的本地文件系统路径。 |
FilePathField | 选择指定目录按限制规则选择文件,有三个参数可选, 其中”path”必需的,这三个参数可以同时使用 |
FloatField | 浮点型字段。 必须提供两个 参数, 参数描述:max_digits:总位数(不包括小数点和符号) decimal_places:小数位数。如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:models.FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百万(小数点后保存10位)的话,你要这样定义:models.FloatField(…,max_digits=19, decimal_places=10) |
ImageField | 类似 FileField, 不过要校验上传对象是否是一个合法图片。它有两个可选参数:height_field 和 width_field,如果提供这两个参数,则图片将按提供的高度和宽度规格保存。 该字段要求 Python Imaging 库。 |
IntegerField | 用于保存一个整数。 |
IPAddressField | 一个字符串形式的 IP 地址, (如 “202.1241.30″)。 |
NullBooleanField | 类似 BooleanField, 不过允许 NULL 作为其中一个选项。 推荐使用这个字段而不要用 BooleanField 加 null=True 选项。 admin 用一个选择框 <select> (三个可选择的值: “Unknown”, “Yes” 和 “No” ) 来表示这种字段数据。 |
PhoneNumberField | 一个带有合法美国风格电话号码校验的 CharField(格式:XXX-XXX-XXXX)。 |
PositiveIntegerField | 类似 IntegerField, 但取值范围为非负整数(这个字段应该是允许0值的…可以理解为无符号整数) |
PositiveSmallIntegerField | 正小整型字段,类似 PositiveIntegerField, 取值范围较小 |
SlugField | 是一个报纸术语. slug 是某个东西的小小标记(短签), 只包含字母,数字,下划线和连字符.它们通常用于URLs。 |
SmallIntegerField | 类似 IntegerField, 不过只允许某个取值范围内的整数。(依赖数据库) |
TimeField | 时间字段,类似于 DateField 和 DateTimeField。 |
URLField | 用于保存 URL。 若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在(即URL是否被有效装入且没有返回404响应)。 |
USStateField | 美国州名缩写,由两个字母组成。 |
XMLField | XML字符字段,校验值是否为合法XML的 TextField,必须提供参数:schema_path:校验文本的 RelaxNG schema 的文件系统路径。 |
- Field选项说明
选项 | 说明 |
---|---|
null | 缺省设置为false.通常不将其用于字符型字段上,比如CharField,TextField上.字符型字段如果没有值会返回空字符串。 |
blank | 该字段是否可以为空。如果为假,则必须有值 |
choices | 一个用来选择值的2维元组。第一个值是实际存储的值,第二个用来方便进行选择。如SEX_CHOICES= ((‘F’,‘Female’),(‘M’,‘Male’),) |
core | db_column,db_index 如果为真将为此字段创建索引 |
default | 设定缺省值 |
editable | 如果为假,admin模式下将不能改写。缺省为真 |
help_text | admin模式下帮助文档 |
primary_key | 设置主键,如果没有设置django创建表时会自动加上ID作为主键 |
radio_admin | 用于admin模式下将select转换为radio显示。只用于ForeignKey或者设置了choices |
unique | 数据唯一 |
unique_for_date | 日期唯一,如下例中系统将不允许title和pub_date两个都相同的数据重复出现 title = meta.CharField(maxlength=30,unique_for_date=’pub_date’) |
unique_for_month / unique_for_year | 用法同上 |
validator_list | 有效性检查。非有效产生 django.core.validators.ValidationError 错误 |
初始化Model
- settings配置:DATABASES中键入你的数据库信息(
假如使用sqlite则保持原有配置即可
)
EG:
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘, #驱动名称
‘NAME‘: ‘‘,#数据库名称
‘USER‘: ‘‘, #数据库用户名
‘PASSWORD‘: ‘‘, #用户名密码
‘HOST‘: ‘‘, #主机地址
‘PORT‘: ‘‘, #端口号
}
}
- 在命令行(若有疑问请查看上文关于app的创建)执行
makemigrations、migrate
初始化Django框架中隐含的表文件- 同上执行
makemigrations、migrate investigate
,初始化你刚刚创建的Model。
创建views
- 创建showform函数,
def showform(request):
if request.method == "POST":
res_data = request.POST # 获取for表单提交数据
ret = data_mod(res_data)
models.UserInfo.objects.create(**ret)
return render(request,‘form.html‘)
- 创建data_mod函数
def data_mod(rets):
ret_data={}
for k_ret,v_ret in rets.items():
if k_ret != ‘csrfmiddlewaretoken‘:
mid = {k_ret:v_ret}
ret_data.update(mid)
return ret_data
- run mysite
- 打开浏览器输入
127.0.0.1:8000/form/
查看效果- 在web中输入你的个人信息,点击提交
字段不能为空,若想填写为空值,可以参考Field选项,在Model创建时设定default值
。- 查看数据是否存储成功
数据可视化工具可随意,推荐Navicat for MySQL
效果展示
问题思考
- 前端数据与后台交互时,采用什么方式更加安全合理?
- 在form表单提交前设置,若填写信息为空则提示用户
- form表单提交数据用request.POST修改会报异常(
This QueryDict instance is immutable
)
作者:羽恒
链接:https://www.jianshu.com/p/7917dd6c3b95
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
以上是关于django前后端交互的主要内容,如果未能解决你的问题,请参考以下文章