Django学习笔记


Web应用程序
一、环境配置
  建立虚拟环境:
  终端,到指定目录
  python -m venv ll_env
  运行模块venv,创建了一个名为ll_env的虚拟环境
  (若出错可安装virtualenv:    $pip install --user virtualenv
  切换目录,再virtualenv ll_env,
  多个版本要选择合适的版本:virtualenv ll_env --python=python3)
  激活虚拟环境:
  【Windows:ll_env\Scripts\activate
  Linux:source ll_env/bin/activate
  停止使用:
    deactivate
  安装Django:
  【(创建并激活虚拟环境情况下)pip install Django

二、在Django中创建项目
  在虚拟环境中:
  【django-admin startproject learning_log .
  【注意末尾的句点,使得文件目录合适】
  (Linux下用ls,Windows下用dir显示当前文件内的文件)

  工程目录: learning_log    manage.py    ll_env
          //
       __init__.py
       settings.py 指定Django如何与你的系统交互、如何管理项目
       urls.py 告诉Django应创建哪些网页来响应浏览器请求
       wsgi.py 帮助Django提供它创建的文件(web server gateway interfaceWeb服务器网关接口)

三、创建数据库
  python manage.py migrate
  根目录下出现一个db.sqlite3的文件
  SQLite是一种使用单个文件的数据库

四、查看项目
  python manage.py runserver
  打开浏览器,localhost:8000

五、创建应用程序
  再打开一个终端
  激活虚拟环境
  【python manage.py startapp learning_logs
  让Django建立创建应用程序所需的基础设施

  定义模型
  models.py定义要在应用程序中管理的数据
  一个模型就是一个类

1 class Topic(models.Model):
2   """用户学习的主题"""
3   text = models.CharField(max_length=200) #数据库预留200字符空间
4   date_added = models.DateTimeField(auto_now_add=True) #自动添加时间
5 
6 def __str__(self):
7   """返回模型的字符串表示"""
8   return self.text

  激活模型
  打开settings.py

1 INSTALLED_APPS = [
2     --snip--
3     'django.contrib.staticfiles',
4 
5     #my application
6     'learning_logs',
7 ]

  让Django修改数据库,使其能够存储与模型Topic相关的信息
  【python manage.py makemigrations learnings_logs
  Migrations for 'learning_logs':
  learning_logs\migrations\0001_initial.py
  - Create model Topic
  Django创建了一个0001_initial.py的迁移文件,这个文件在数据库中为Topic创建一个表
  应用这种迁移:【python manage.py migrate

修改数据时:
1.修改models.py
2.对learning_logs调用makemigrations
3.让Django迁移项目

 六、Django管理网站

  创建超级用户
    【python manage.py createsuperuser
    
输入用户名、邮箱(可选)、密码
    注:Django并不存储密码,而是存储从该密码派生出来的散列值。
    每次输入密码时,都将计算其散列值,与存储的散列值进行比较。
    在网站配置正确的情况下,几乎无法根据散列值推导出原始密码。

  向管理网站注册模型
    Django在model.py所在目录创建了admin.py的文件

1 from learning_logs.model import Topic #导入要注册的模型
2 
3 admin.site.register(Topic) #让Django通过管理网站管理模型

  添加主题
    点击Topic的ADD可以添加主题


  定义一个新模型,在models.py里

 1 class Entry(models.Model):
 2     """学到的有关某个主题的具体知识"""
 3     topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
 4     text = models.TextField()
 5     date_added = models.DateTimeField(auto_now_add=True)
 6 
 7     class Meta:
 8         verbose_name_plural='entries'
 9 
10     def __str__(self):
11         """返回模型的字符串显示"""
12         return self.text[0:50] + "...        

    admin.py里: 

1 from learning_logs.models import Topic,Entry
2 
3 
4 admin.site.register(Topic)
5 admin.site.register(Entry)

  Django shell
    交互式终端会话环境
    虚拟环境下:
    python manage.py shell
    >>> from learning_logs.models import Topic
    >>> Topic.objects.all() 获取模型Topic的所有实例,返回查询集
    , ]>

    遍历查询集
    >>>topics = Topic.objects.all()
    >>>for topic in topics:
    ... print(topic.id,topic)
    ...
    3 Chess
    4 Rock Climbing

    >>> t = Topic.objects.get(id=3)
    >>> t.text
    'Chess'
    >>> t.date_added
    datetime.datetime(2018, 5, 22, 7, 49, 40, 722487, tzinfo=)
    >>> t.entry_set.all()
    ]>

 

 2018-05-22 21:38:07