Django--------3.0.4
对于在django中开发项目,在一些位置的理解和易错
每个views.py将会对应一个html,每个models.py中,每个类对应一个数据库,此时在models.py中创建相关数据模型。
—————————更改项目中settings.py文件—————————
在settings.py中
INSTALLED_APPS=(
#添加创建的app
)
————————更改项目中settings.py文件结束————————
————————————修改数据库—————————————
创建数据库:
python manage.py migrate
常用数据类型:
#在模型中类需要传参为models.Model,字段类型一些字母需要大写
text=models.CharField(max_length=)#此数据是由字符或文本组成的字段
date=models.DateTimeField(auto_now_add=True)#此数据为记录时间的字段。
number=models.IntegerField()#为记录数字的字段
user=models.ForeignKey(User,on_delete=models.CASCADE)
#由于版本不同,Foreignkey(),需要传递两个参数。第一个参数为关联外键的名
在models.py中,每个类如果需要返回数据,则在此类中定义函数__str__()函数,return 返回数据
此时,修改数据库,(数据库的迁移,使django可以修改数据库,储存相关数据)
python manage.py makemigrations appname。
python manage.py makemigrations appname
#appname是你所要为app创建数据库的app名称
查看数据库迁移是否正常工作:python manage.py migrate
python manage.py migrate
#查看迁移数据库之后,是否能正常工作
——————————数据库修改完成—————————————
—————————————修改url——————————————
此时在项目中修改urls.py,需要注意的是,新老版本的django不同,include传参不同path(‘表达式’,include(‘appname.urls’,‘appname’),namespace=‘appname’)
urlpatterns=[
path('表达式',include('appname.urls','appname'),namespace='appname'),]
此时,在app内urls.py文件中写入url。用于调用网页
from django.conf.urls import url
form . import views#此时引用当前目录下的views.py,用于渲染页面
urlpatterns=[
url('正则表达式',views.color,name='htmlname'),]
此时在使用此app时,若符合正则表达式,则会调用此页面,使用views.py渲染页面后,输出
————————————urls配置完毕————————————
———————————配置视图views.py———————————
#定义视图
#在视图中使用数据渲染页面时,需要引入数据库
from .models import topic#topic为数据库名称
def color(request)#color与app中urls.py中url的views.color相同
return render(request,'appname/htmlname')#将渲染的页面传输到html中
#此时,为最简单的页面,直接返回原页面
#如果在某种条件下跳转页面reuturn HttpResponseRedirect(reverse('appname:html'))#返回页面名
#如果在渲染页面中,需要给页面传递数据,在render(request,'appname/htmlname',{'htmlcontextname':this contextname})
#此时,将会给页面传递数据
————————————配置视图完毕————————————
————————————html接收数据、继承—————————
继承html分为被继承,和继承,需要在被继承页面中插入块标签
在被继承的html中
{% block content %}{% endblock content %},是一个占位符,包含的信息将由子模版指定。
在继承的html中
头文件{% extends appname/htmlname %},指出被继承的页面,需要注意的是,在一个项目下,不同app之间也可以继承页面。
{% block content %}{% endblock content %},content需要和被继承的占位符名称相同。
———————————在数据库中关联外键——————————
如果迁移数据库之后发现需要再次关联外键,首先更改models.py加入外键。重新迁移数据库,此时系统会检测到之前的数据没有关联到刚刚添加的外键,会给出两个选项,第一个选项为现在提供默认值,第二,现在推出,在models.py中添加默认值。如果选择第一个选项,则会让我们输入所要关联外键的id值。
————————————关联外键完毕————————————
————————根据现有数据模型创建表单——————————
from django import forms
from .models import Topic,Entry#Topic,Entry为数据库名称
class Entrycform(forms.ModelForm):
class Meta:#告诉Django使用哪个类来创建表格
model=Entry#根据Entry数据Entry创建表格
fields=['text']#告诉Django数据包含哪些字段
————————————创建表单完成————————————
—————————————更改视图—————————————
在要填写内容的位置增加
from .forms import Entryform
form=Entryform()#建立表格对象
form=Entryform(data=request.POST)#使post的数据填充表格
if form.is_valid():#判断上传数据是否合法
new=form.save(commit=False)#将上传的数据暂时保存,由于上传的数据暂未完整,需要填充外键,此外键不能用户填写
new.topic=topic#将此数据增加外键后,再保存到数据库
new.save()
在渲染页面时,应该将form返回到html中
return render(request'appname/htmlname',{'form':form})
#此时,将页面中的列表返回到html页面中
———————————更改视图完成—————————————
————————————跳转网页——————————————
传递数据之后需要自动跳转网页:
return HttpRespnseRedirect(reverse('appname:htmlname',args=[]))
#有时跳转到的网页需要传递一些参数,跳转到指定数据的网页,使用args=[]传递参数
————————————跳转网页完成————————————
————————————html中提交页面———————————
在html页面中使用为防止对服务器未经授权的访问,在提交表单等内容时,在中写入
{% csrf_token %}
再将渲染页面的表格输出
{{ form.as_p }}
此时是,在页面中可以输入数据,并提交
——————————html中提交页面完成———————————
——————————添加数据输出数据条件——————————
使用装饰器:
在views.py中引入装饰器模块
from django.contrib.auth.decorators
#在需要数据私有化的视图函数之前加
@login_required
在settings.py中末尾位置添加我的设置:
LOGIN_URL='/appname/login/'
#测试这个设置,如果未登录用户,点击需要需要登录才能查看的数据,会自动跳转到此链接
———————————数据输出条件结束———————————
————————————url书写格式—————————————
在views.py中返回渲染的网页时:
return render(request,'appname/htmlname')
在继承网页时:
{% extends ‘appname/htmlname’ %}
在重定向页面时:
return HttpResponseRedirect(reverse('appname:htmlname'))
在a标签中:
href="{% url ‘appname:htmlname’ %}"
———————————url书写格式结束————————————
以上为个人学习总结,如有错误,敬请指正
邮箱xiang20010326@sina.com