Django文档:

https://docs.djangoproject.com/en/1.10/ref/

一、简单创建app

1.1 命令行创建project和app。

django-admin startproject HelloWorld

cd HelloWorld

python manage.py startapp app01

1.2 pycharm创建app

2、将app01加入settings并配置url。

3、启动app

python manage.py runserver 8000

二、

生成环境:

settings.py

DEBUG = False

ALLOWED_HOSTS = ["*"]

2.1 配置加载html

 或者通过render()返回html页面。

1
2
3
4
def login(request):
    # content = open("templates/app01/login.html","r").read()
    # return HttpResponse(content)
    return render(request,"app01/login.html")

  

注意html里的加载的css,jq,js用http的方式或配置静态文件的方式引入。

2.2 django将表应用到数据库。

python manage.py makemigration   #根据class创建创建数据库的配置文件

python manage.py migrate       # 根据配置文件创建数据库表

2.3 django创建后台管理员账户

python manage.py createsuperuser

2.4 路由系统

动态路由,正则表达式: 这个(\d+) 会传入news(request,nid)函数。

二级路由

首先创建app01, python manage.py startapp app02

from django.conf.urls import url,include

,在app01目录下的urls.py下配置urls,在app02目录下的urls.py下配置urls

 2.5 数据库操作

数据库连接:

1
2
3
4
5
6
7
8
9
10
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'day15',
        'HOST':'127.0.0.1',
        'PORT':'3306',
        'USER':'root',
        'PASSWORD':'root',
    }
}

  

modles.py

1
2
3
4
5
class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    age = models.IntegerField()
# 默认会自动添加自增的id作为主键

一对多,多对多

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Author(models.Model):
    first_name = models.CharField(max_length=32)
    last_name = models.CharField(max_length=32)
    email = models.EmailField()
 
class Publisher(models.Model):
    name = models.CharField(max_length=64,unique=True)
    address = models.CharField(max_length=128)
    city = models.CharField(max_length=64)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()
 
class Book(models.Model):
    bookname = models.CharField(max_length=128)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publish_date = models.DateField()

  

然后,执行python manage.py makemigrations ;  python manage.py migrate

1
2
3
4
5
6
7
8
9
10
11
12
13
E:\day15>python2 manage.py makemigrations
Migrations for 'app01':
  app01\migrations\0002_auto_20160807_2043.py:
    - Create model Author
    - Create model Book
    - Create model Publisher
    - Add field publisher to book
E:\day15>python2 manage.py migrate
Operations to perform:
  Apply all migrations: admin, app01, auth, contenttypes, sessions
Running migrations:
  Rendering model states... DONE
  Applying app01.0002_auto_20160807_2043... OK

会生成第三张表:

Django后台管理数据库。

首先在app01的admin.py下注册数据库表

1
2
3
4
5
6
import models
# Register your models here.
admin.site.register(models.UserInfo)
admin.site.register(models.Author)
admin.site.register(models.Book)
admin.site.register(models.Publisher)

创建后台用户:

python manage.py createsuperuser

登录后台并操作表:

定制表在后台返回字符串:

1
2
3
4
5
6
class Author(models.Model):
    first_name = models.CharField(max_length=32)
    last_name = models.CharField(max_length=32)
    email = models.EmailField()
    def __unicode__(self):
        return "author: %s %s"%(self.first_name,self.last_name)

后台样式:

由于book是需要关联其他标的,所以在新增book数据时,关联字段是不能任意填写的,只能选择:

修改字段:

1
first_name = models.CharField(max_length=32,null=True)

python manage.py makemigrations,python manage.py migrate

虽然数据库种这个字段可以为空,但是在Gjango后台还是不能以空插入数据:

要以空值插入数据,需要修改类中的表定义:

1
2
3
4
5
6
7
8
9
10
11
first_name = models.CharField(max_length=32,null=True,blank=True)
"""
blank¶
 
Field.blank¶
If True, the field is allowed to be blank. Default is False.
 
Note that this is different than null. null is purely database-related, whereas
blank is validation-related. If a field has blank=True, form validation will allow
entry of an empty value. If a field has blank=False, the field will be required.
"""

参考文档:

https://docs.djangoproject.com/en/1.10/ref/models/fields/

增、删、改、查(针对userinfo表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def db_h(request):
    # 增
    # models.UserInfo.objects.create(username="ds",password="123",age=18)
    # 删
    # models.UserInfo.objects.filter(username='ds').delete()
    # 改
    # models.UserInfo.objects.filter(age=18).update(age=20)
    # models.UserInfo.objects.all().update(age=19)
    # 查
    userlist_obj = models.UserInfo.objects.all()
 
    users = []
    for user in userlist_obj:
        users.append(user.username)
 
    userstring = json.dumps(users)
    # models.UserInfo.objects.filter(username='ds')
    # models.UserInfo.objects.filter(age=18).first()
 
    return HttpResponse(userstring)

  模糊查找:参见官方文档。

https://docs.djangoproject.com/en/1.10/ref/models/querysets/

https://docs.djangoproject.com/en/1.10/topics/db/queries/

对于上面的多对多手动新增书籍:

1
2
3
4
5
6
7
8
E:\python27\day15>python2 manage.py shell
>>> from datatime import datatime
>>> p = models.Publisher.object.filter().first()
>>> b =  models.Book(bookname="OWASP",publish_date=datetime.now(),publisher=p)
>>> b.save()
>>> a = models.Author.objects.filter().first()
>>> b.authors.add(a)
>>> b.authors.remove(a)

  

数据库取数据,并将数据传入html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# app01.views
def db_h(request):
    userlist_obj = models.UserInfo.objects.all()
    return render(request,"app01/tables.html",{"li":userlist_obj})
 
# templates.app01.tables.html
        <table>
            <tr>
                <th>姓名</th>
                <th>密码</th>
                <th>年龄</th>
            </tr>
            {% for item in li %}
            <tr>
                <td>{{ item.username}}</td>
                <td>{{ item.password }}</td>
                <td>{{ item.age }}</td>
            </tr>
            {% endfor %}
        </table>

  

2,6 引入静态文件

注意要是列表或元组,

 2.7 数据提交。

对于POST请求需在setttings里把跨站请求注释掉。# 'django.middleware.csrf.CsrfViewMiddleware',

我们可以通过POST和GET方式提交,提交到后台的数据通过request.GET或request.POST方式取得,request,method是提交的方法,值为"POST"或"GET"。

('val:', <QueryDict: {u'username': [u'gg'], u'age': [u'21'], u'password': [u'rr']}>)  , 这是在后台打印的POST方式的数据。我们可以通过request.POST["username"]获取username的值。

JSON数据转换:

1
2
3
4
5
6
7
8
# 将字典转为JSON格式(字符串)再发送给客户端
response_data_ok = {"status":"ok"}
return HttpResponse(json.dumps(response_data_ok))
 
# 客户端接收JSON格式的字符串后再反转为原来的格式
"success":function(msg1){
                            msg = JSON.parse(msg1)
}

  

 未完待续

2.8 Template渲染

基本语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
E:\day15>python2 manage.py shell
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
>>> from django.template import Context,Template
>>> t = Template("My name is {{name}},I'am {{age}} years old")
>>> c = Context({"name":"DS","age":18})
>>> t.render(c)
u"My name is DS,I'am 18 years old"
>>> for i in [{"name":"DS","age":18},{"name":"lj","age":20}]:
...     print(t.render(Context(i)))
...
My name is DS,I'am 18 years old
My name is lj,I'am 20 years old
>>>
 
# 深度变量查找1
>>> p = {"name":"ow","age":20}
>>> t1 = Template("My name is {{person.name}}")
>>> c = Context({'person':p})
>>> t1.render(c)
u'My name is ow'
 
 
# 深度变量查找2
>>> t = Template("My name is {{item.1}}")
>>> c = Context({"item":["ds","lj","cc"]})
>>> t.render(c)
u'My name is lj'
 
# 深度查找3(类)
>>> import datetime
>>> d = datetime.date(2016,8,7)
>>> d.year
2016
>>> t = Template("today is {{i.year}} {{i.month}} {{i.day}}")
>>> c = Context({"i":d})
>>> t.render(c)
u'today is 2016 8 7'

Template用于模板文件语法:

1
2
3
4
5
6
7
8
9
10
{% for item in li %}
            <tr>
                <td>{{ item.username}}</td>
                <td>{{ item.password }}</td>
                <td>{{ item.age }}</td>
            </tr>
{% endfor %}
 
forloop.counter0 循环计数器
value}divisibleby:"2"  能被2整除

html继承和重写

模板app01/modle.html

1
2
3
4
5
6
7
<html>
<body>
<div>...</div>
{% block content %}
{% endblock %}
</body>
</html>

继承和重写app01/admin.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{%  extends "app01/modle.html" %}
 
{% block content %}
    <div class="container">
        <table class="table table-bordered table-hover ">
            <tr>
                <th>姓名</th>
                <th>密码</th>
                <th>年龄</th>
            </tr>
            {% for item in li %}
            <tr>
                <td>{{ item.username}}</td>
                <td>{{ item.password }}</td>
                <td>{{ item.age }}</td>
            </tr>
            {% endfor %}
        </table>
    </div>
{%  endblock %}

导入

1
2
3
4
5
6
7
# weather.html
<div>
Weather
</div>
 
# login.html
{% include "app01/weather.html %}

Django入门的更多相关文章

  1. 【django入门教程】Django的安装和入门

    很多初学django的朋友,都不知道如何安装django开发以及django的入门,今天小编就给大家讲讲django入门教程. 注明:python版本为3.3.1.Django版本为1.5.1,操作系 ...

  2. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  3. python学习笔记--Django入门四 管理站点

    上一节  Django入门三 Django 与数据库的交互:数据建模 "管理员界面"是基础功能中的重要部分. django.contrib 包 Django自动管理工具是djang ...

  4. Django 入门

    Django 入门 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模型,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容 ...

  5. Django入门实践(三)

    Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...

  6. Django入门实践(二)

    Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...

  7. Django入门实践(一)

    Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...

  8. Django入门笔记

    Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有 ...

  9. Django 入门案例开发(上)

    Django 入门案例开发(中) http://www.cnblogs.com/focusBI/p/7858267.html Django是一个重量级的web开发框架,它提供了很多内部已开发好的插件供 ...

  10. 【Python全栈-后端开发】Django入门基础-2

    Django入门基础知识-2 一 .模版 一.模版的组成 HTML代码+逻辑控制代码 二.逻辑控制代码的组成 1  变量(使用双大括号来引用变量) {{var_name}} 2  标签(tag)的使用 ...

随机推荐

  1. canvas实现拖动页面时显示窗口视频

    简介 当前主流的视频网站目前有不少新鲜好玩的功能,最明显的莫过于小视频的显示--当视频不在当前视口范围 时,会在右下角用一个小窗口来显示当前的视频,而且可以拖拽. 今晚心血来潮,起了动手试试的念头.我 ...

  2. iOS_常用C语言函数

    一.随机数: 1.rand(); 范围:        0-无穷大. 特点:        仅第一次随机,其他次都是和第一次相同.常用于调试. 返回值:     long 实例:        int ...

  3. js实现可拖拽的div

    前言 下午忙里偷闲想写一个可拖拽的例子,留在脑海里一直都是三个事件mouseDown,mouseUp,mouseMove, 但从没有动手实践过,今天想起了自己实践了并学习了张鑫旭的demo实现. 学习 ...

  4. 解析ActionResult子类JsonResult

    前言 MVC我是11开始使用的,当时还是在上地软件园一小型互联网公司,当时是MVC2.0+Linq to sql.后来接着学习MVC3,MVC3的出现确实让我有种眼前一亮的感觉,期间我不断的写各种de ...

  5. Asp.Net 使用Npoi导出Excel

    引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...

  6. TeamCity : 配置第一个工程

    前面我们已经创建了TeamCity Server 和一个 Agent,接下来我们为一个.net core 控制台程序配置自动化的编译. 创建 .net core 项目 我们在本地创建一个简单的 .ne ...

  7. C++ this指针的用法

    this指针的含义及其用法: 1. this指针是一个隐含于每一个成员函数中的特殊指针.它指向正在被该成员函数操作的那个对象.2. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针, ...

  8. 服务器Config文件不能查看的问题

      由于某种需求,需要从IIS发布的服务中下载扩展名为config的文件,但是发布文件后,在浏览器无法查看文件.根据反馈的的错误提示,大致说config属于配置文件,处于安全考虑,不能随便浏览. 如果 ...

  9. 【nodejs笔记1】配置webstorm + node.js +express + mongodb开发博客的环境

    1. 安装webstorm 并破解 2. 安装node (以及express框架) 至官网下载并安装.(http://nodejs.org)v0.10.32   msi  安装后测试,打开命令行, c ...

  10. 虚拟机安装ubuntu问题解决办法

    vmware workstation 10安装ubuntu 13.10看不到下一步,如图所示 解决办法:如果不能调整安装程序的窗口大小,就按住Alt往上托窗口,应该就可以看到右下方的"下一步 ...