django学习笔记(自用)

django视频学习:
···p9有关数据模型须要看看。
如下知识应该能够本身搭博客了。
django这种大框架有点难开头,教程我也找了不少,发现这种大框架仍是看视频学比较好,我找到了很好学的教程css

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

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

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

将数据存入数据库:
在项目目录下输入python manage.py shell
对你所创造的数据类型进行操做: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’’django

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 = [ … ] # 每页多少行,自行设置,超过这个数字就会出现多页app

#添加、修改页(页面右上方出现的增长就是添加页面,直接点击某一个数据的主键就是修改页面)属性
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