model.py的作用就是操作***数据库 ***
django设置数据库,不需要学习其他额外的语言,它的ORM系统,就能帮助你设计数据库,而工作流程就是在你的app下面,设置好Model.py
将ORM模型映射到数据库中,总结起来就是以下几步:
- 在settings.py中,配置好DATABASES,做好数据库相关的配置。
- 在app中的models.py中定义好模型,这个模型必须继承自django.db.models。
- 将这个app添加到settings.py的INSTALLED_APP中。
- 在命令行终端,进入到项目所在的路径,然后执行命令python manage.py makemigrations来生成迁移脚本文件。
- 同样在命令行中,执行命令python manage.py migrate来将迁移脚本文件映射到数据库中。
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=20,null=False)
author = models.CharField(max_length=20,null=False)
pub_time = models.DateTimeField(default=datetime.now)
price = models.FloatField(default=0)
form.py的作用是作为数据验证是否合法,一般会配合views的cleaned_data使用
Django中的表单丰富了传统的HTML语言中的表单。在Django中的表单,主要做以下两件事:
- 渲染表单模板。
2. 表单验证数据是否合法。
比如你传回的数字是不是传回成了符号,如果你定义的是密码,那么form就会自定义为哈希码,从而保密。
文章内容的验证
# forms.py
class MessageBoardForm(forms.Form):
title = forms.CharField(max_length=3,label='标题',min_length=2,error_messages={"min_length":'标题字符段不符合要求!'})
content = forms.CharField(widget=forms.Textarea,label='内容')
email = forms.EmailField(label='邮箱')
reply = forms.BooleanField(required=False,label='回复')
# views.py
class IndexView(View):
def get(self,request):
form = MessageBoardForm()
return render(request,'index.html',{'form':form})
def post(self,request):
form = MessageBoardForm(request.POST)
if form.is_valid():
title = form.cleaned_data.get('title')
content = form.cleaned_data.get('content')
email = form.cleaned_data.get('email')
reply = form.cleaned_data.get('reply')
return HttpResponse('success')
else:
print(form.errors)
return HttpResponse('fail')
modelform的作用主要是简化了model和form
比如,你定义了一个model.py里面有了一个叫做Article的属性,当你在form里面再重新定义一次的时候,你会发现其实填写的内容会一样(参考上面的那段代码),而from.ModelFrom则可以直接继承,不用再重新写一次form的重复属性
这里是数据库操作
#model.py
rom django.db import models
from django.core import validators
class Article(models.Model):
title = models.CharField(max_length=10,validators=[validators.MinLengthValidator(limit_value=3)])
content = models.TextField()
author = models.CharField(max_length=100)
category = models.CharField(max_length=100)
create_time = models.DateTimeField(auto_now_add=True)
这里是表单
#form.py
from django import forms
class MyForm(forms.ModelForm):
class Meta:
model = Article
fields = ['title','content']
最后只要在views.py里面进行验证就好了。
# views.py
class IndexView(View):
def get(self,request):
form = MessageBoardForm()
return render(request,'index.html',{'form':form})
def post(self,request):
form = MessageBoardForm(request.POST)
if form.is_valid():
title = form.cleaned_data.get('title')
content = form.cleaned_data.get('content')
email = form.cleaned_data.get('email')
reply = form.cleaned_data.get('reply')
return HttpResponse('success')
else:
print(form.errors)
return HttpResponse('fail')
```