新建Django配置

阅读: 评论:0

新建Django配置

新建Django配置

新建djando的配置

一  :新建django的配置

准备工作,先在数据库中创建一个库,并指定utf8编码

 

1 CREATE DATABASE IF NOT EXISTS student default character  set  utf8 COLLATE utf8_general_ci;

 

  

 

在项目下的settings.py配置文件下配置数据库

1 2 3 4 5 6 7 8 9 DATABASES  =  {      'default' : {          'ENGINE' 'django.sql' ,          'NAME' 'student' ,          'USER' 'root' ,          'PASSWORD' '123123' ,          'HOST' '192.168.244.10' ,          'PORT' '3306' ,      }<br>}

__init__.py文件的配置

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import  pymysql pymysql.install_as_MySQLdb() #打开数据库链接 db  =  t( "192.168.244.10" , "root" , "123123" , "student" ) #使用cursor()方法获取游标 cursor  =  db.cursor() ute( "SELECT VERSION()" ) data  =  cursor.fetchone() print ( "Database version : %s"  %  data) db.close()

 测试一下和数据库的连通性

1 python manage.py runserver <br>完了以后先退出终端,先不启动

***************************************

二 .创建一个应用,并激活

1 python manage.py startapp myApp

创建项目后在settings.py文件中添加项目

激活其实就是这一步的添加过程

1 2 3 4 5 6 7 8 INSTALLED_APPS  =  [      &#ib.admin' ,      &#ib.auth' ,      &#ib.contenttypes' ,      &#ib.sessions' ,      &#ib.messages' ,      &#ib.staticfiles' ,      'myApp'

 在模板中定义和数据表相对应的类

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class  Grades(models.Model):      gname  =  models.CharField(max_length = 20 )      gdate   =  models.DateField()      ggirlnum  =  models.IntegerField()      gboynum  =  models.IntegerField()      isDelete  =  models.BooleanField(default = False )      def  __str__( self ):          return  "%s-%d-%d"  % ( self .gname, self .ggirlnum, self .gboynum) class  Student(models.Model):      sname  =  models.CharField(max_length = 20 )      sgender  =  models.BooleanField(default = True )      sage  =  models.IntegerField()      scontend  =  models.CharField(max_length = 20 )      isDelete  =  models.BooleanField(default = False )      sgrade  =  models.ForeignKey( "Grades" ,on_delete = models.CASCADE)

 

 

 

在数据库中生成数据表:

要在数据库中生成数据,先要生成一个迁移文件,并执行迁移文件

创建上面的应用myApp后,会在myApp下生成migrations目录

1 python manage.py makemigrations<br><br><br>python manage.py migrate

  

 

 

三 :在终端测试模板和数据库交互的情况(创建数据)

1 2 3 4 5 6 进入django的shell环境 E:老男孩课程tudent>python manage.py shell ########################################### >>>  from  dels  import  Grades,Student >>>  from  django.utils  import  timezone >>>  from  datetime  import  *
1 from  dels  import  Grades,Student
1 from  django.utils  import  timezone
1 from  datetime  import  *
1 2 3 4 5 <br> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 通过模型类查看数据 >>> Grades.objects. all ()
1 Grades.objects. all ()
1 2 3 4 5 6 7 8 9 10 11 12 13 <br> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 添加一条数据的本质 本质:创建一个模型类的对象 >>> grade1  =  Grades() >>> ame  =  "python04" >>> grade1.gdate  =  datetime(year = 2017 ,month = 11 ,day = 17 ) >>> irlnum  =  3 >>> grade1.gboynum  =  70 >>> grade1.save()<br><br>
1 grade1  =  Grades()
1 ame  =  "python04"
1 grade1.gdate  =  datetime(year = 2017 ,month = 11 ,day = 17 )
1 irlnum  =  3
1 grade1.gboynum  =  70
1 grade1.save()
1 <br><br>
1 <br><br>

----------------------------------------------------------------------------------------------
>>> grade2 = Grades()
>>> ame = "python05"
>>>
>>>
>>> grade2.gdate = datetime(year=2017,month=11,day=30)
>>> irlnum = 8
>>> grage2.gboynum = 66
>>> grade2.gboynum = 72
>>> grade2.save()

grade2 = Grades()

grade2.gdate = datetime(year=2017,month=11,day=30)

grade2.gboynum = 66

grade2.gboynum = 72

grade2.save()

----------------------------------------------------------------------------------

  

四 :在shell环境查看生成的表数据(包括修改和删除数据)

退出重新进一次shell环境

1 2 3 4 5 6 7 8 9 10 11 12 quit() python manage.py shell #并重新导入三个库 >>>  from  dels  import  Grades,Student >>>  from  django.utils  import  timezone >>>  from  datetime  import  * 通过模型类查看数据 >>> Grades.objects. all ()<br><br>查看单个表中的数据

>>> (pk=1)
<Grades: python04-3-70>
>>> (pk=2)
<Grades: python05-8-72>

 

修改单个表中的数据

语法:模型对象.gboynum=值

>>> grade2.gboynum = 50
>>> grade2.save()

 

删除单个表中的数据(物理删除)

语法:模型对象.delete()

>>> grade2.delete()
(1, {'myApp.Student': 0, 'myApp.Grades': 1})

  

获得关联对象的集合

先创建两个学生表

1 2 3 4 5 6 7 >>> grade1 = (pk = 1 ) >>> stu1  =  Student() >>> stu1.sname  =  "王福田" >>> stu1.sgender  =  False >>> stu1.sage  =  25 <br> #如下,指点班级列等于另外一个表的对象,就会自动关联 >>> stu1.sgrade  =  grade1  >>> stu1.save()
1 grade1 = (pk = 1 )
1 stu1  =  Student()
1 stu1.sname  =  "王福田"
1 stu1.sgender  =  False
1 stu1.sage  =  25
1 stu1.sgrade  =  grade1
1 stu1.save()<br> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 2 3 4 5 6 7 <br> >>> stu2  =  Student() >>> stu2.sname  =  "张宝来" >>> stu2.sgender  =  False >>> stu2.sage  =  30 >>> stu2.sgrade  =  grade1 >>> stu2.save()<br><br>
1 stu2  =  Student()
1 stu2.sname  =  "张宝来"
1 stu2.sgender  =  False
1 stu2.sage  =  30
1 stu2.sgrade  =  grade1
1 stu2.save()<br> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 <br><br><br>查看班级有哪些学生:<br>因为没有重写类的 return ,所以返回的不是数据<br>另外,_set. all 是django自带的一个方法,虽然我没有定义,但是也可以使用

>>> grade1.student_set.all()
<QuerySet [<Student: Student object (1)>, <Student: Student object (2)>]>
>>>

  

一条命令创建学生并关联主键

不用save,直接存入数据库

1 >>> stu3 = grade1.ate(sname = u 'zhangsan' ,scontend = u 'my name is zhangsan' ,sage = 45 )

  

在maApp文件夹下的models.py文件中编写一个函数,用于返回数据值

1 2 3 4 5 6 7 8 class  Grades(models.Model):      gname  =  models.CharField(max_length = 20 )      gdate   =  models.DateField()      ggirlnum  =  models.IntegerField()      gboynum  =  models.IntegerField()      isDelete  =  models.BooleanField(default = False )      def  __str__( self ):          return  "%s-%d-%d"  % ( self .gname, self .ggirlnum, self .gboynum)

  

五 .启动服务器

1 2 3 python manage.py runserver  ip:port 如果是本机可以不写,默认是本机ip,端口是 8000 python manage.py runserver

  

五. 站点管理

在另外一个终端,创建超用户

1 python manage.py createsuperuser<br><br>

  

在setting.py文件中修改字符集和时间

1 2 3 LANGUAGE_CODE  =  'zh-Hans' TIME_ZONE  =  'Asia/Shanghai'

  

管理数据表

在admin.py文件中对表进行注册

注册以后刷新127.0.0.1:8000/admin/页面,会出现已经注册上的表

1 2 3 4 5 from  .models  import  Grades,Student #注册 ister(Grades) ister(Student)

  

 5.1 站点自定义管理

在应用的admin.py文件中定义

1 2 3 4 5 6 7 from  .models  import  Grades,Student class  GradesAdmin(admin.ModelAdmin):      #列表页属性      list_display  =  [ 'gname' , 'gdate' , 'ggirlnum' , 'gboynum' , 'isDelete' ]      # list_filter = ['gname']      # search_fields = []      # list_per_page = []
class StudentAdmin(admin.ModelAdmin):
list_display = ['sname','sgender','sage','sgrade','isDelete','scontend']
list_per_page = 2
  #添加,修改列表也属性
  #可以规定先后顺寻,
  #这两个属性不能同时使用
  # fields =['ggirlnum','gboynum','gdate','isDelete']
  # fieldsets = [
  # ("num",{"fields":['ggirlnum','gboynum']}),
  # ("base",{"fields":['gname','gdate','isDelete']})
  # ]
1 ister(Grades,GradesAdmin)  #要点,这个后面怎加了GradesAdmin,否则上面的属性不会用到 ister(Student)<br><br>
ister(Student,StudentAdmin)

  

5.2 小需求练习

在原来的admin.py配置文件中加入StudentInfo类,并在GradeAdmin类中加入inlines属性

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class  StudentInfo(admin.TabularInline):      #使用模板中的哪个类      model  =  Student      #自动添加几个      extra  =  2 class  GradesAdmin(admin.ModelAdmin):      inlines  =  [StudentInfo]      #列表页属性      list_display  =  [ 'gname' , 'gdate' , 'ggirlnum' , 'gboynum' , 'isDelete' ]      #过滤条件      list_filter  =  [ 'gname' ]      #搜索字段      search_fields  =  [ 'gname' ]      #分页      # list_per_page = 2

  

5.3布尔值的显示问题

男女显示的问题

1 2 3 4 5 6 class  StudentAdmin(admin.ModelAdmin):      def  gender( self ):          if  self .sgender:              return  "男"          else :              return  "女" <br>   
#设置页面列的名称
gender.short_description = "性别"
1 list_display  =  [ 'pk' , 'sname' , 'gender' , 'sage' , 'sgrade' , 'isDelete' , 'scontend' ] list_per_page  =  10

5.4执行动作的位置问题(action的问题)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class  StudentAdmin(admin.ModelAdmin):      # def gender(self):      #     if self.sgender:      #         return "男"      #     else:      #         return "女"      #设置页面列的名称      # gender.short_description = "性别"        #就是设置action的布尔值      actions_on_bottom  =  True      actions_on_top  =  False      list_display  =  [ 'pk' , 'sname' , 'gender' , 'sage' , 'sgrade' , 'isDelete' , 'scontend' ]      list_per_page  =  10 ister(Grades,GradesAdmin) ister(Student,StudentAdmin)

  

5.5使用装饰器完成注册

1 以后都用装饰器来完成注册<br><br><br>&#ister(Student)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class  StudentAdmin(admin.ModelAdmin):      # def gender(self):      #     if self.sgender:      #         return "男"      #     else:      #         return "女"      #设置页面列的名称      # gender.short_description = "性别"        #就是设置action的布尔值      actions_on_bottom  =  True      actions_on_top  =  False      list_display  =  [ 'pk' , 'sname' , 'gender' , 'sage' , 'sgrade' , 'isDelete' , 'scontend' ]      list_per_page  =  10 <br><br>把调用注释掉
1 #ister(Student,StudentAdmin)

  

六,视图

视图其实就是一个函数,在创建的app中的vews.py文件中添加

1 2 3 4 5 from  django.shortcuts  import  render from  django.http  import  HttpResponse # Create your views here. def  index(request):      return  HttpResponse( "sunck is a good man" )

  

按照django架构,http请求过来是先找url,url在找视图,所以我们这里先配置url控制器

urls.py文件默认在项目student目录下,除此之外,我们需要在新建的应用myApp目录中也建一个urls.py文件,所以总共加起来有两个urls.py文件

这里我们先配置默认已经存在的urls.py文件

1 2 3 4 5 6 7 from  ib  import  admin from  f.urls  import  include,url urlpatterns  =  [      url(r 'admin/' , admin.site.urls),      url(r '^' ,include( 'myApp.urls' )), ]

 

 

接下来修改刚创建的myApp文件下的urls.py文件

1 2 3 4 5 from  f.urls  import  url from  import  views urlpatterns  =  [      url (r '^$' , views.index) ]

  

七,模板

模板是html页面

根据视图中传递过来啦的数据,进行填充

7.1创建模板目录

在templates目录下创建目录,templates和myApp,student,manage,py都是同级的

在templates目录下创建对应的应用的目录

 

7.2配置模板路径

在settings.py文件

其中basedir指的就是myApp,student,manage,py这几个所在的文件夹的目录

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 TEMPLATES  =  [      {          'BACKEND' &#plate.backends.django.DjangoTemplates' ,          'DIRS' : [os.path.join(BASE_DIR,  'templates' )]          ,          'APP_DIRS' True ,          'OPTIONS' : {              'context_processors' : [                  &#t_processors.debug' ,                  &#quest' ,                  &#t_processors.auth' ,                  &#ssages' ,              ],          },      }, ]

  

7.3小需求练习,我要展示172.0.0.1:8000/grade

先定义模板,我的html长什么样

在templates下的myApp下新建一个html文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!DOCTYPE html> <html lang = "en" > <head>      <meta charset = "UTF-8" >      <title>班级< / title> < / head> <body>      <h1>          { %  for  grade  in  grades % }          <li>              <a href = "#" >{{ ame }}< / a>          < / li>          { %  endfor  % }      < / h1> < / body> < / html>

  

 

7.3.1模板语法;

语法1:{{输出值,可以是变量,也可以是对象.属性}}

语法2:{%代码段%}

 

7.3.2, 定义视图

视图从模板中取数据

1 2 3 4 5 6 7 8 9 10 11 12 13 from  django.shortcuts  import  render from  django.http  import  HttpResponse # Create your views here. def  index(request):      return  HttpResponse( "sunck is a good man" ) from  .models  import  Grades def  grades(request):      #去模板里取数据      gradesList = Grades.objects. all ()      #将数据传递给模板,模板再渲染页面,将渲染好的页面返回给浏览器,下面字典里的grades就是html中的变量      return  render(request, 'myApp/grades.html' ,{ "grades" :gradesList})

 

7.3.3  设置url,

浏览器通过url来找视图

因为上面最外层的url已经包含了应用层的url,所以直接在最里面的urls.py文件中配置视图

1 2 3 4 5 6 7 from  f.urls  import  url from  import  views urlpatterns  =  [      url (r '^$' , views.index),      #如果没有视图,则要导入      url(r '^grades/$' ,ades) ]

  

 7.4 小需求,在原来的基础上,展示班级下面的所有学生

定义视图

1 2 3 4 5 6 7 8 9 10 11 from  .models  import  Student def  students(request):      studentsList = Student.objects. all ()      return  render(request, 'myApp/student.html' ,{ "students" :studentsList}) def  gradesStudents(request,num):      #获得对应的班级对象      grade = (pk = num)      #获得班级下的所有学生      studentsList  =  grade.student_set. all ()      return  render(request, 'myApp/student.html' ,{ "students" :studentsList})

  

添加url

1 2 3 4 5 6 7 8 9 from  f.urls  import  url from  import  views urlpatterns  =  [      url (r '^$' , views.index),      #如果没有视图,则要导入      url(r '^grades/$' ,ades),      url(r 'students/$' ,views.students),      url(r '^grades/(d+)$' ,adesStudents) ]

  

创建学生的模板

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!DOCTYPE html> <html lang = "en" > <head>      <meta charset = "UTF-8" >      <title>学生信息< / title> < / head> <body>      <h1>          <ul>              { %  for  student  in  students  % }               <li>                  {{ student.sname }} - - {{ students.scontend }}               < / li>                { %  endfor  % }          < / ul>      < / h1> < / body> < / html>

  

 同时修改班级的模板

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!DOCTYPE html> <html lang = "en" > <head>      <meta charset = "UTF-8" >      <title>班级< / title> < / head> <body>      <h1>          { %  for  grade  in  grades % }          <li>              <a href = "{{ grade.id }}" >{{ ame }}< / a>          < / li>          { %  endfor  % }      < / h1> < / body> < / html>

 

八:移动数据库以后,删除迁移文件,在生成一次迁移文件,再执行

ll

九。补充,ORM映射关系

O:模型   R:映射   M:数据库

 

十.模型类,属性,表,字段的关系

一个模型类在数据库中对应一张表,模型类的属性在与之对应的表中对应一个字段

模型类中的属性

学习链接:

 十一,创建模型管理器

先修改模型类

  修改了模型类

 

再准备数据,重新迁移一次数据

1 2 3 4 5 6 7 8 9 10 11 12 13 insert into grades(gname,gdate,ggirlnum,gboynum,isDelete) values( "python01" , "2018-2-3" , 22 , 34 , 0 ), ( "python02" , "2018-2-2" , 27 , 34 , 0 ), ( "python03" , "2018-2-30" , 22 , 34 , 0 ), ( "python04" , "2018-2-30" , 22 , 34 , 0 );           - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - insert into student(sname,sgender,scontend,isDelete,sgrade_id,sage,lastTime,creatTime) values( "薛延美" , 1 , "薛延美" , 0 , 4 , 20 , "2018-2-3" , "2018-2-3" ), ( "王占山" , 1 , "我叫网站山" , 0 , 4 , 20 , "2018-2-3" , "2018-2-3" ), ( "李婷" , 1 , "我叫李婷" , 0 , 4 , 20 , "2018-2-3" , "2018-2-3" ), ( "赵本山" , 1 , "我叫赵本山" , 0 , 4 , 20 , "2018-2-3" , "2018-2-3" ), ( "刘大河" , 1 , "我叫刘大河" , 0 , 4 , 20 , "2018-2-3" , "2018-2-3" ), ( "刘德华" , 1 , "我叫刘德华" , 0 , 4 , 20 , "2018-2-3" , "2018-2-3" );

转载于:.html

本文发布于:2024-02-02 00:57:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170681170340362.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Django
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23