Django:学习笔记(2)——创建第一个应用

Django:学习笔记(2)——创建第一个应用

创建应用

  在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定。Django 自带一个工具,可以帮你生成应用的基础目录结构,这样你就能专心写代码,而不是创建目录了。

  我们可以执行如下命令,来创建myweb应用。

python manager.py startapp myweb

  执行结束后,python为我们的项目创建好了一个遵循约定的目录结构

  

注意:我们做一个区分,我们使用django-admin startproject创建后生成的目录为项目目录,应用目录是创建在项目目录内的,项目目录内同时包含了一个和项目同名的目录,我们叫项目源目录,后文不在赘述。

创建第一个视图

  我们在目录中的views.py文件里,写入第一个视图,Hello World

from django.http import HttpResponsedef index(request):return HttpResponse("Hello World!")

  视图有了,我们还需要一个URL来映射到它,我们需要在该目录下创建一个urls.py文件

from django.conf.urls import url,includefrom . import viewsurlpatterns = [url('', views.index, name='index'),
]

  下一步是要在根 URLconf 文件中指定我们创建的 myweb.urls 模块。在项目源目录urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:

from django.conf.urls import url,include
from django.contrib import adminurlpatterns = [url('web/',include('myweb.urls')),url(r'^admin/', admin.site.urls)
]

  现在我们已经可以通过访问/web路径,得到hello,world结果,效果如下图:

  

创建第一个模型

  在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计。

说明:

  模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,它们会自动从模型生成

  我们现在做一个用户登录的例子,首先我们需要定义用户信息模型。

# 定义一个用户信息
class User(models.Model):username = models.CharField(max_length=16)password = models.CharField(max_length=16)gender = models.CharField()mail = models.EmailField()

  代码非常直白。模型被表示为 django.db.models.Model 类的子类。每个模型有一些类变量,它们都表示模型里的一个数据库字段

  每个字段都是 Field 类的实例 - 比如,字符字段被表示为 CharField ,日期时间字段被表示为 DateTimeField 。这将告诉 Django 每个字段要处理的数据类型。每个 Field 类实例变量的名字也是字段名,所以最好使用对机器友好的格式。你将会在 Python 代码里使用它们,而数据库会将它们作为列名。

注意:我们可以使用 ForeignKey 定义了一个关系。这将告诉 Django,每个 Choice 对象都关联到一个 Question 对象。Django 支持所有常用的数据库关系:多对一、多对多和一对一,我们将在后面文章补充这部分内容

激活模型

  上面我们创建一个用户模型,它给了 Django 很多信息,通过这些信息,Django 可以为这个应用创建数据库表结构(生成 CREATE TABLE 语句),同时创建可以与User对象进行交互的 Python 数据库 API。但在这之前,我们需要做一些操作。

把应用安装到项目

  但是首先得把myweb 应用安装到我们的项目里。为了在我们的工程中包含这个应用,我们需要在项目源目录的setting.py中的 INSTALLED_APPS 中添加设置。因为 MyWebConfig 类写在文件 myweb/apps.py 中,所以它的点式路径是 'myweb.apps.MyWebConfig'。如下图所示:

将模型同步到数据库

  我们的模型创建好了以后,我们需要执行一些方法,告知django将我们写好的user模型同步到数据库中,即创建相应的表结构。

  我们需要执行一次数据迁移,通过运行 makemigrations 命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移,这一点很像Git,但是记住它只是记录一下你的修改操作而已。

django会在我们应用的migrations下创建迁移文件。

接着,我们再运行migrate命令,在数据库里创建新定义的模型的数据表。

python manage.py migrate

 说明:我们也可以通过迁移文件,来查看会执行哪些SQL命令。

 python manage.py sqlmigrate myweb 0001

  总之,我们在修改模型后,需要执行两步操作来将新的模型同步到数据库中。

  

实践:实现用户注册

  首先,我们还是要回顾一下这篇文章的内容,我们知道了如何创建一个视图以及设置URL映射、如何创建一个模型并且同步到数据库中,现在我们来实践一下实现用户注册。

  在视图的处理中,我们可以做任何事情,并且返回任何我们需要反馈的信息。首先在想要获取到用户的请求信息,它们都被保存在request.GET和request.POST这两个字典中。

[文件:myweb/views.py]
def addUser(request):# 创建用户对象user = User()# 获取请求数据user.username = request.GET['username'];user.password = request.GET['password'];# 保存user.save();return HttpResponse('<p>用户添加成功</p>');

  接着,我们在应用的urls.py中添加URL映射关系

[文件:myweb/urls.py]
urlpatterns = [url("add",views.addUser)
]

  按照GET方式,我们在访问时,需要在URL中拼接请求信息,如下

  

  至此,我们的第一个实践内容结束,我们完成了一个获取用户请求信息,并调用模型内置方法将数据保存到数据库

 

转载于:https://www.cnblogs.com/MrSaver/p/10374584.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dubbo源码解析(十)远程通信——Exchange层

远程通讯——Exchange层 目标&#xff1a;介绍Exchange层的相关设计和逻辑、介绍dubbo-remoting-api中的exchange包内的源码解析。前言 上一篇文章我讲的是dubbo框架设计中Transport层&#xff0c;这篇文章我要讲的是它的上一层Exchange层&#xff0c;也就是信息交换层。官方文…

嵌入式软件开发工程师谈软件架构的设计

嵌入式软件开发工程师谈软件架构的设计 注&#xff1a;此处嵌入式特指基于linux平台&#xff0c;单片机和其他rtos不在讨论范围 笔者从事嵌入式软件开发有6&#xff0c;7个年头&#xff0c;bsp&#xff0c;驱动&#xff0c;应用软件&#xff0c;android hall&#xff0c;fram…

为何获得风险投资的公司多数倒闭了?

北京时间12月12日消息&#xff0c;据国外媒体报道&#xff0c;哈佛商学院的高级讲师施克哈尔高希(Shikhar Ghosh)指出&#xff0c;风险投资领域的失败案例比媒体报道的要多得多。 高希的研究表明&#xff0c;在风险资本支持的公司之中&#xff0c;有75%的公司从未向投资者返回过…

Linux rm命令、Linux touch命令、Linux tee命令

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Linux rm命令用于删除一个文件或者目录。 语法 rm [options] name...[options] name... 参数&#xff1a; -i 删除前逐一询问确认。…

highCharts使用中问题总结

想出一张图表&#xff0c;数据是多条线体&#xff0c;45天的数据展示最近15天的。并且每次展示其中一条。可以切换时间看前面的 或者后面的。最开始遇到的问题是&#xff0c;展示一条线体成功&#xff0c;但是在切换线体的时候&#xff0c;成功但是接着刷新到最开始的状态。跟同…

基于pjsip实现p2p语音对讲

目的 为实现跨网络的语音对讲&#xff0c;使位于NAT后的两个设备进行p2p的语音通讯&#xff0c;此处选用pjsip开源项目来实现。 未解决的问题&#xff1a;对称型的NAT无法实现p2p打洞&#xff0c;pjsip采用turn服务进行转发&#xff0c;不能称之为纯粹的p2p。 pjisp简介 PJ…

VS2017 启动调试报错无法启动程序 当前状态中非法

昨天还可以使用&#xff0c;今天就莫名报了这个错误&#xff0c;百度了一下&#xff1a; 1. 第一种尝试方法是右击解决方案中的项目(图标有带球的)&#xff0c;打开属性选择“WEB”选项&#xff0c;修改特定页为Home,结果还是报错。 2.我又关闭Windows防火墙&#xff0c;依旧报…

ABAP WRITE

1、空行 WRITE /. 2、AS CHECKBOX DATA: check1 TYPE c LENGTH 1 VALUE X, check2 TYPE c LENGTH 1 VALUE . START-OF-SELECTION. WRITE: / check1 AS CHECKBOX, Checkbox 1, / check2 AS CHECKBOX, Checkbox 2. AT LINE-SELECTION. READ: LINE 1 FIELD VALUE check1, LINE 2 …

java 星期几、得周一、得周日、上周、下周、相差、日期工具类

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 import org.apache.commons.lang3.StringUtils;import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut…

苹果前CEO斯卡利变身创业导师:欲寻下个乔布斯

乔布斯和约翰斯卡利 导语&#xff1a;国外媒体今天撰文称&#xff0c;苹果前CEO约翰斯卡利(John Sculley)虽然早已离开苹果&#xff0c;但仍然活跃在科技行业。他现在将目光转向了医疗科技领域&#xff0c;希望从中挖掘出下一个乔布斯。 以下为文章全文&#xff1a; 下一个乔布…

记录一次kernel内存泄漏的查找定位过程

Bug描述&#xff1a;压力测试一个小工程时发现内存逐渐减少&#xff0c;10个小时后出现OOM Bug定位过程&#xff1a; 对整个工程模块进行分解&#xff0c;逐步缩小范围&#xff0c;由于整个工程包括几个相对独立的小模块&#xff0c;而整个工程采用单进程多线程的模型&#x…

python3.6+selenium_Testsuits测试套件

#!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2018/11/23 11:23 # File : unittest_test2_2.pyTestsuits测试套件 import unittest from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.commo…

PBRT笔记(7)——反射模型

基础术语 表面反射可以分为4大类&#xff1a; diffuse 漫反射glossy specular 镜面反射高光perfect specular 完美反射高光retro-reflective distributions 后反射分布几何坐标系以及工具函数 pbrt中的反射是在反射坐标系中进行计算的。坐标系由着色点处法向量与两个切向量组成…

Linux grep命令、Linux cd命令、Linux pwd命令

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Linux grep命令用于查找文件里符合条件的字符串。 grep指令用于查找内容包含指定的范本样式的文件&#xff0c;如果发现某文件的内容符…

忠告:创业公司与大公司正面竞争易死

移动互联网的兴起给了创业公司足够的发展空间&#xff0c;也提供了一个相对公平的竞争平台。但机遇永远与挑战并存。   对于初创公司&#xff0c;最大的挑战莫过于在移动互联网大潮中生存下来。IDG资本合伙人高翔认为&#xff0c;初创公司不要和大公司正面竞争&#xff0c;应…

海康萤石摄像机远程监控机制分析

背景介绍 有一个远程监控的需求&#xff0c;正常情况下采用服务器转发视频流对服务器要求很高&#xff0c;所以p2p看似是一个比较好的方案&#xff0c;但是p2p打洞却不是一件容易的事情&#xff0c;所以打算分析下海康萤石摄像机远程监控的机制&#xff0c;是否采用了p2p的方式…

实体类中存在List集合,怎么在xml文件中,对应

public class AppointmentDTO {/**订单id**/private String appointmentId;/**订单里面的商品list**/private List<CommodityShowInAppoinment> list;/**订单里面的商品数量**/private Integer count;/**订单实际付款的金额**/private Float totalMoney; } 怎么弄呢&…

git管理复杂项目代码

背景 我初学前端的时候接触git&#xff0c;那时候只要会add/commit什么的就好了&#xff0c;网上的教程大多都停留在从头到尾一个个介绍git的命令&#xff0c;关于各种用法&#xff0c;特别是多个分支来回交叉冲突的实际处理&#xff0c;很少有这方面的介绍&#xff0c;经过很多…

实现一个通用的生产者消费者队列(c语言版本)

背景&#xff1a;笔者之前一直从事嵌入式音视频相关的开发工作&#xff0c;对于音视频的数据的处理&#xff0c;生产者消费者队列必不可少&#xff0c;而如何实现一个高效稳定的生产者消费者队列则十分重要&#xff0c;不过按照笔者从业的经验&#xff0c;所看到的现象&#xf…

美媒:小米新浪达成合作 采取行动对抗腾讯

来自美媒的报道称&#xff0c;两家中国最具发展潜力的科技公司&#xff0c;新浪和小米将会共同合作&#xff0c;结合各自的通信应用程序来共同对抗移动通信的挑战&#xff0c;尤其是拥有2亿用户的强劲对手微信。 来自中国的消息称&#xff0c;这次新浪与小米的合作将会涉及到新…