django学习笔记(自用)

    xiaoxiao2025-03-04  35

    django视频学习: ···p9有关数据模型需要看看。 以下知识应该可以自己搭博客了。 django这种大框架有点难开头,教程我也找了很多,发现这种大框架还是看视频学比较好,我找到了很好学的教程

    models.py:与数据库进行交互。models下有以下数据模型:CharField、DateTimeField、IntegerField、BooleanField… 当没有规定主键的时候会自动生成主键。 视频规定了2个类,一个是Grades,一个是Students,因为Students要存到对应的grades里面去,所以在Students类里面加一个数据类型ForeignKey(‘Grades’)(2.0以后需要在绑定的后面,加入on_delete=models.CASCADE(),这个参数是代表当被绑定的外键被删除后子键进行的处理)。

    当models.py配置完成后,就可以制造数据库了,python manage.py makemigrations。成功后在app的migrations文件下的0001_inital.py下可以查看相关信息。(没有创造主键的可以发现在Migration下的operations列表下的files除了之前创造的数据模型,还多了一个ID,这个ID就是自动生成的主键)。之后再输入python manage.py migrate(数据库迁移,迁移之后可以在数据库中查看到生成的tables)。

    查看生成的tables,可以发现有两个tables名为app名字_grades和app名字_students(之前在models里面创造的类都生成了table)

    将数据存入数据库: 在项目目录下输入python manage.py shell 对你所创造的数据类型进行操作:

    from myapp.models import Grades,Students #必须要导入这个类,后面的方法才能实现 from django.utils import timezone from datetime import * grade1 = Grade() #grade1为Grade类 grade1.gname = 'x' grade1.gdate = datetime(year=2019,month=2,day=17) ....... # 对其他Grade类的变量赋值(必须要把在models.py中定义的数据类型(除了外键)全部赋值,否则会报错,如果要赋值外键的话,需要在这之前就通过后面的 类名.object.get(pk=..) 获得某一行进行赋值) grade1.save() #对所赋值的变量保存到数据库中,并可以通过数据查询到所存的数据(如果在某个类里面定义__str__(self)方法,(重新进来)当调用Grades(一个类).object.all()时显示的就是一个列表,里面包含了所有存进去的__str__():方法的return值)

    在Shell中对数据库的某个类的table(也就是数据库里面的项目名_类名的数据库)进行操作: (1)查看:如果想查看单个object,利用Grades(一个类名).object.get(pk=想查看的数据的id值,也就是主键值)。想查看所有的 (2)修改:查看的方法会返回table里面的一行(之前pk查看的),如果要修改可以直接将查看的值赋值给一个变量,修改的话直接 变量名.col = … 进行修改 (最后要保存 变量名.save() ) (3)删除: ①物理删除:直接按照上面的 .delete()方法删除 (4)增加:除了之前的赋值一个新的对象后一个个赋值以外,也可以通过一个外键的方式进行存储,方法为:例如:grade1.students_set.create(sname=‘x’…可以不全部赋值)

    在setting.py中修改语言: 在LANGUAGE_CODE = ‘zh-Hans 在setting.py 中修改时区:’ 在TIME_ZONE = ‘Asia/shanghai’’

    admin进行站点管理: 内容发布:负责添,修,删 创建管理员用户:在该目录cmd下输入python manage.py createsuperuser。

    管理数据表,修改admin.py: 需要导入model下的类,然后进行注册。 (示例代码为: from django … from .models import Grades,Students admin.site.register(Grades) #注册Grades类 admin.site.register(Students) #注册Students类 ) 自定义管理界面: class GradesAdmin(admin.ModelAdmin): #列表页属性: list_display=[‘pk’,‘gname’,‘gdate’,‘ggirlnum’,‘gboynum’,‘isDelete’] #按照顺序,显示每一行一个类的值 list_filter = [ … ] # 过滤器,可以加多个进行选择(如果之前在数据模型里面没有定义pk这个值,里面加入了pk就会报错) search_fields = [ … ] # 搜索器,使用后将会在上面出现搜索栏,列表里面的内容就是搜索的属性(如果有多个不知道怎么搜) list_per_page = [ … ] # 每页多少行,自行设置,超过这个数字就会出现多页

    #添加、修改页(页面右上方出现的增加就是添加页面,直接点击某一个数据的主键就是修改页面)属性 fields = [ … ] # 按照顺序在页面显示属性,如果没有就是不能修改 (与fieldsets不能同时使用) fieldsets = [ (“num”,{“fields”: [‘ggirlnum’,‘gboynum’] }), (“base”,{‘fields’: [‘gname’,‘gdate’,‘isDetele’ ]}) ] #给属性分组 (与fields不能同时使用)

    如果想在管理页面添加的时候一次添加多个对象

    后面要将这些属性应用到进去: admin.site.register(Grades, GradesAdmin) #将显示类里面应用到Grades的register页面里面去

    views.py:创建视图 from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse(“sunck is a good man”)

    在项目名/urls.py下: from django.contrib import admin from django.urls import path,include urlpatterns = [ path(‘admin/’, admin.site.urls), #代表输入网站/admin就会跳转到admin.site.urls下(管理员界面) path’aaa/’,include(‘myapp.urls’)) #代表输入任何网站就会跳转到myapp.urls下 ]

    在myapp文件下新建一个urls.py文件: from django.urls import path,re_path from . import views urlpatterns = [ path(‘aaa’,views.index) #与上面结合,也就是输入网站/aaa/aaa会访问views.py下的index类,显示的内容就是return 下的HttpResponse(里面显示的内容(可以是html+css+js) ]

    创建模板目录: 在大的project文件下(与app文件夹同级)创建templates的文件夹,再在里面创建app名字的文件夹。 配置路径: 修改setting.py下的TEMPLATES属性,里面有一个‘DIRS’,变成[os.path.join(BASE_DIR,‘templates’)] 新建grades.html和students.html: 与html代码一样,模块语法: ①{{输出值,可以是变量,可以是}} ②{%输出代码段%} 创建grades页面,并使其能搞访问数据库的grades类: ( 视频中:在templates文件夹下的myapp下新建grades.html文件,输入(body中):

    <h1>班级信息列表</h1> <ul> <!--[python04,python05,python06]--> {%for grade in grades%} <li> <a href="#">{{grade.gname}}</a> </li> {%endfor%} </ul>

    继续在views.py中新建一个类并导入Grades类,代码: from .models import Grades,Students def grades(request): #去模板取数据 gradesList = Grades.objects.all() #获取Grades的所有内容,gradesList存着所有Grades内容 #gradesList传递给模板,模板在渲染页面,将渲染的页面返回浏览器 return render(request,‘myapp/grades.html’,{“grades”:gradesList}) #render第一个参数是request,第二个参数是要传的路径,第三个的原因是因为在html文件中的储存变量的是grades,所以最后一个变量就是将gradesList内容传给里面的grades。 pass )

    视频来源:B站千峰python

    最新回复(0)