django学习一

1.建立虚拟环境:
    新建一个目录:learning_log
    命令:python -m venv ll_env
2.激活虚拟环境:
    命令: ll_env\Scripts\activate
    终止命令:deactivate
3.安装django:
    命令:pip install Django==1.11
4.在django中创建项目:
    命令:django-admin startproject learning_log .
5.创建数据库:
     命令:python manage.py migrate
6.查看项目:
    命令:python manage.py runserver

创建应用程序:命令窗口切换到manage.py 所在的目录,执行命令 python manage.py startapp learning_logs (让Django创建应用程序所需的基础设施)
1.定义模型:
    模型告诉django如何处理应用程序中储存的数据:
创建Topic类,继承Model---django中一个定义了模型基本功能的类。Topic类只有2个属性:text和data_added.
属性text是一个charfield---由字符或文本组成的数据。定义charfield属性时,必须告诉django该在数据库中预留多少空间
属性date_added是一个datetimefield---记录日期和时间的数据,我们传递实参auto_now_add=True,当用户创建新主题时,让django将这个属性自动设置成当前日期和时间
django调用方法__str__()来显示模型的简单表示,这里它返回储存在属性text中的字符串
models.py
 
class Topic(models.Model):
"""用户学习的主题"""
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
 
def __str__(self):
"""返回模型的字符串表示"""
return self.text
2.激活模型:
    要使用模型,必须让Django将应用程序含到项目中,为此打开settings.py:
 
这是一个元组,告诉django项目是由那些应用程序组成的
将前面的应用程序添加到这个元组中
# Application definition
 
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'learning_logs'
]
窗口命令:
 
(ll_env) E:\learning_log>python manage.py makemigrations learning_log
django创建了一个名为0001_initial.py的迁移文件,这个文件将在数据库中为模型创建一个表
用这种迁移,让django替我们修改数据库:
(ll_env) E:\learning_log>python manage.py migrate
每当需要修改“学习笔记”管理的数据时,都采取三个步骤:
1.修改models.py
2.对learning_logs调用makemigrations
3.让django迁移项目
3.django管理网站
    
 
1.创建超级用户:
(ll_env) E:\learning_log>python manage.py createsuperuser
2.向管理网站注册模型:我们创建的模型,必须手工进行注册(django在models.py所在目录中创建了一个名为admin.py的文件)
这些代码让django通过管理网站管理我们的模型,访问 http://localhost:8000/admin/
admin.py
from django.contrib import admin
 
# Register your models here.
from learning_logs.models import Topic
admin.site.register(Topic)
3.添加主题:直接在页面上添加 Rock Climbing 和  Chess
4.定义模型Entry
    每个条目都与特定主题相关联,这种关系被称为多对一关系。
 
1.第一个属性topic是一个ForeignKey实例。外键是一个数据库术语,它引用了数据库中另一条记录;这些代码将每个条目关联到特定的主题。每个主题创建时,都给它分配了一个键(或ID)。需要在两项数据之间建立联系时,Django使用与每项信息相关联的键
2.属性text,它是一个TextFiled实例。这种字段不需要限制长度,因为我们不想限制条目的长度
3.属性date_added让我们能够按创建顺序呈现条目,并在每个条目旁边放置时间戳
4.我们在Entry类中嵌套了Meta类。Meta存储用于管理模型的额外信息,在这里,它让我们能够设置一个特殊属性,让Django在需要使用Entries来表示多个条目。如果没有这个类,django将使用Entrys来表示多个条目。
5.方法 __str__()告诉Django,呈现条目时应显示哪些信息
models.py
class Entry(models.Model):
'''学到的有关某个主题的具体知识'''
  topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
  text = models.TextField()
  date_added = models.DateTimeField(auto_now_add=True)
 
   class Meta:
     verbose_name_plural = 'entries'
 
def __str__(self):
'''返回模型的字符串表示'''
return self.text[:50] + "..."
5.迁移模型Entry
    由于我们添加了一个新模型,因此需要再次迁移数据库。
(修改 models.py,执行命令  python manage.py makemigrations app_name,再执行命令 python manage.py migrate)
 
(ll_env) E:\learning_log>python manage.py makemigrations learning_logs
Migrations for 'learning_logs':
  learning_logs\migrations\0002_entry.py
    - Create model Entry
 
(ll_env) E:\learning_log>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, learning_logs, sessions
Running migrations:
6.向管理网站注册Entry
    我们还需要注册模型Entry。为此,需要将admin.py修改成类似于下面这样:
 
admin.py
from django.contrib import admin
 
# Register your models here.
from learning_logs.models import Topic, Entry
admin.site.register(Topic)
admin.site.register(Entry)
7.django shell
   适合来测试项目和排除故障
    每次修改模型后,你都需要重启shell,这样才能看到修改的效果。要推出shell会话,CTR+Z,再按回车键
 
1.使用方法Topic.objects.all()来获取模型Topic的所有实例;它返回的是一个列表,称为查询集(queryset)
(ll_env) E:\learning_log>python manage.py shell
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from learning_logs.models import Topic
>>> Topic.objects.all()
<QuerySet [<Topic: Chess>, <Topic: Rock Climbing>]>
2.我们可以像遍历列表一样遍历查询集
可知,主题Chess的ID为1,而Rock Climbing的ID为2;知道对象的ID后,就可以获取该对象并查看其任何属性
>>> topics = Topic.objects.all()
>>> for topic in topics:
...     print(topic.id, topic)
...
1 Chess
2 Rock Climbing
3.查看主题Chess的属性text和date_added的值
>>> t = Topic.objects.get(id = 1)
>>> t.text
'Chess'
>>> t.date_added
datetime.datetime(2018, 10, 9, 13, 3, 3, 631668, tzinfo=<UTC>)
4.我们还可以查看与主题相关的条目,前面我们给模型Entry定义了属性topic,这是一个ForeignKey,将条目与主题关联起来。利用这种关联,Django能够获取与特定主题相关联的所有条目
为通过外键关系获取数据,可使用相关模型的小写名称+下划线+单词set。例如,假设你有模型Pizza和Topping,而Topping通过一个外键关联到Pizza;
如果你有一个名为my_pizza的对象,表示一张比萨,就可以使用代码my_pizza.topping_set.all()来获取这张披萨的所有配料
>>> t.entry_set.all()
<QuerySet [<Entry: often used to eat a lot of fast food. KFC and Mcdo...>, <Entry: It is known to all that Newton got the great inspi...>]>
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/pp-zz/p/9926004.html