Django【视图和网址】

一,首先创建一个项目(project),名字为mysite

django-admin startproject 

如果运行成功会出现如下的的目录样式

我们会发现执行命令后,新建了一个mysite目录,其中还有一个mysite子目录.这个子目录mysite中一些
项目的设置settings.py文件,总的urls配置文件urls.py以及部署服务器时用到的wsgi.py文件,
init.py是python包的目录结构必须的,和调用有关.大致的各个文件或文件夹的作用如下:

二,新建一个应用app,名字叫polls

app应用与project项目的区别:


三,编写第一个视图

在polls/views.py中编写如下代码

image.png

为了使用这个视图,我在polls文件夹下,创建一个urls.py来编写路由路径.

# encoding:utf-8
__author__ = 'Fioman'
__date__ = '2018/11/5 15:07'

from django.conf.urls import url
from .views import *

urlpatterns = [
    url(r'^$',index,name='index'),
]

但是这个路由是app中的具体的路由,但是Django项目在运行的时候,路由的分发是从主目录下
的url.py开始分发的,所以我们还要在主urls.py中,总路由二级分发,使用include语句

include语法相当于是多级路由,它把接收到的url地址去除前面的正则表达式,将剩下的字符串传递给下一级
路由进行判断.

include的背后是一种即插即用的思想,项目的路由不关心具体的app的路由策略,
只管往指定的二级路由转发,实现了应用解耦.app所属的二级路由可以根据自己的需要随意编写.
路由设置成功之后,在浏览器中访问http://127.0.0.1:8000/polls/,应该就可以看到消息了

四.模型和后台管理

1. 数据库的安装:
打开mysite/settings.py,找到Django默认的数据库设置.Django默认采用的是SQLite数据库.

如果使用的不是SQLite,比如使用MySql必须在settings.py中作出相应的修改

注意,settings.py中的顶部的INSTALLED_APPS,它列出了所有的项目中被激活的Django应用(app).
你必须将自己定义的app注册到这里,否则应用无法使用.默认情况下:

migrate命令将遍历INSTALL_APPS设置的所有项目,在数据库中创建对应的表,并打印每一条
对应的动作信息.

2. 创建模型
Django通过ORM(对象关系模型)进行数据库操作,通过模型,将Python代码和数据库操作结合起来,
实现对SQL语句的封装.Django通过Python类的形式定义具体的模型,每个模型的物理存在方式就是
一个Python的类Class,每个模型类模型对应数据库的一张表.而每个类的实例代表数据库中一行数据,
类中的每个变量代表数据库中的一个字段.

我们先创建两个模型:Question 和 Choice.编辑models.py

from django.db import models

# Create your models here.
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('published date')


class Choice(models.Model):
    # question是外键,关联的外键是Question里面的id字段
    # on_delete=models.CASCADE 是级联删除的意思.
    # 级联(Cascade):把主表中主键修改为一个新的值时,相应修改子表中外键的值;
    # 或者删除主表中主键的记录时,要相应删除子表中外键的记录。
    # 外键级联删除的时候,操作主表时会关联到子表,但是操作子表,不会关联到主表。
    question = models.ForeignKey(Question,on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

3. 启用模型
模型操作三部曲

4. 静态文件配置

看不明白?有图有真相

5. Django基础必备三件套

响应实例,一个登陆的响应实例,如何实现登陆失败页面提示.

image.png

五.ORM (对象关系映射模型)

1. 问题一:为什么要使用ORM

首先不同的程序员对于数据库的操作的熟练程度不一样,程序员写的执行的效率也不敢预期.
所以Django为了开发快捷,使用ORM模型来操作数据库.使用ORM有一下的优点:

① 简单,不用自己写SQL语句
② 开发效率较高

缺点就是,执行效果不能保证是最优的,并且有特殊的语法需要记忆.

2.问题二: ORM中对象和数据库中具体的表的对应关系:

对象
实例 表中的一行记录
属性变量 表中的字段

3.ORM能做哪些事情

1.操作数据表 --> 创建表/删除表/修改表 操作models.py里面的类
2.操作数据行 --> 数据的增删改查
注意: 不能创建数据库,自己动手创建数据库

4.使用Django的ORM详细步骤

1.自己动手创建数据库:
create database 数据库名
2.在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)

image.png

3.告诉Django用pymysql代替默认的MYSQLDB 连接MySQL数据库
在项目的init.py中写入一下两句:
import pymysql
告诉Django用pymysql来代替默认的MySQLdb
mysqldb.install_as_MySQLdb()

  1. 在app下面的models.py文件中定义一个类,这个类必须继承自models.Model
    class 类名(models.Model):
    ...
  2. 执行两个命令,将在models中的数据库设置,使得其在数据库中生效


4.ORM的增删改查

1.删除: 先找到对象,调用对象的.delete()方法

publisher_obj = models.Publisher.objects.get(id=7)
publisher_obj.delete()
或者
models.Publisher.objects.get(id=7).delete()

2.修改:找到对象,通过修改对象的属性来修改数据库中指定字段的值,要保存.

publisher_obj = models.Publisher.objects.get(id=7)
publisher_obj.name = '新出版社的名字'
publisher_obj.save() -> 把修改提交到数据库

3.查询:从所数据库中获取所有的书籍对象

all_book = Book.objects().all()

4.增加:先获取新增加的书籍的名称,以及对应的publisher_id值

new_title = request.POST.get('book_title')
new_publisher = request.POST.get('publisher_id')
Book.objects().create(title=new_title,publisher_id=new_publisher)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容