应用程式的始建访问,基于cookie和session的记名验证

settings.py

据他们说cookie和session的记名验证,cookiesession验证

settings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

1般不要修改settings.py,但是选用模版须要修改如下:(即将TEMPLATES中的DI奥迪Q5S改成[os.path.join(BASE_DIR,
‘templates’)])

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS':  [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 

urls.py

from django.urls import path
from cookie import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/',views.login),
    path('index/',views.index),
]

models.py

from django.db import models

# Create your models here.
class User(models.Model):
    user=models.CharField(max_length=20,unique=True,db_index=True)
    pwd=models.CharField(max_length=20,db_index=True)
    def __str__(self):
        return self.user

views.py

from django.shortcuts import render, redirect
from .models import User


# Create your views here.
def login(request):
    msg = ''
    if request.method == 'POST':
        name = request.POST.get("user")
        pwd = request.POST.get("pwd")
        c = User.objects.filter(user=name, pwd=pwd).count()
        if c:
            request.session['is_log'] = 111
            request.session['username'] = name
            return redirect('/index/')
        else:
            msg = '用户名或密码有误'
            return render(request, 'login.html', {'msg': msg})
    else:
        return render(request, 'login.html', {'msg': msg})


def index(request):
    print(request.session.get('is_log'))
    if request.session.get('is_log', None):
        user = request.session.get('username')
        return render(request, 'index.html', {'user': user})
    else:
        return redirect('/login/')


def bb(request):
    return redirect('/login/')

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
欢迎 {{ user }}!
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form action="/login/" method="post">
    {% csrf_token %}
    <div>
        <laber for="user">用户名</laber>
        <input id="user" type="text" name="user"/>
    </div>
    <div>
        <laber for="pwd">密码</laber>
        <input id="pwd" type="password" name="pwd">
    </div>
    <div>
        <input type="submit" value="登录">
    </div>
</form>
</body>
</html>

小心:由于大家将session存于数据库中之所以要实施python manage.py
makemigrations 后再进行python manage.py migrate创制数据表。

settings.py MIDDLEWARE = [ ‘
django.middleware.security.SecurityMiddleware ‘ , ‘
django.contrib.sessions.middleware.Sess…

 

 

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

 ①、创设项目

 1、创立项目

诚如不要修改settings.py,不过采用模版要求修改如下:(即将TEMPLATES中的DIHighlanderS改成[os.path.join(BASE_DIR,
‘templates’)])

1.命令:django-admin startproject sitename

1.命令:django-admin startproject sitename

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS':  [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

2.IDLE环境:本质上都是执行上述命令

2.IDLE环境:本质上都以实践上述命令

 

常用命令:

应用程式的始建访问,基于cookie和session的记名验证。常用命令:

urls.py

  python manage.py runserver 0.0.0.0 (运营服务)
  python manage.py startapp appname (创设二个Application)
  python manage.py syncdb()
  python manage.py makemigrations()
  python manage.py migrate()

  python manage.py runserver 0.0.0.0 (运转服务)
  python manage.py startapp appname (创制2个Application)
  python manage.py syncdb()
  python manage.py makemigrations()
  python manage.py migrate()

from django.urls import path
from cookie import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/',views.login),
    path('index/',views.index),
]

  python manage.py createsuperuser (制造Django Admin登录用户)

  python manage.py createsuperuser (创造Django Admin登录用户)

models.py

 

 

from django.db import models

# Create your models here.
class User(models.Model):
    user=models.CharField(max_length=20,unique=True,db_index=True)
    pwd=models.CharField(max_length=20,db_index=True)
    def __str__(self):
        return self.user

二、创建APP(application)

二、创建APP(application)

views.py

1.一声令下:dos下进入项目目录执行:python manage.py startapp web(app名称)

1.一声令下:dos下进入项目目录执行:python manage.py startapp web(app名称)

from django.shortcuts import render, redirect
from .models import User


# Create your views here.
def login(request):
    msg = ''
    if request.method == 'POST':
        name = request.POST.get("user")
        pwd = request.POST.get("pwd")
        c = User.objects.filter(user=name, pwd=pwd).count()
        if c:
            request.session['is_log'] = 111
            request.session['username'] = name
            return redirect('/index/')
        else:
            msg = '用户名或密码有误'
            return render(request, 'login.html', {'msg': msg})
    else:
        return render(request, 'login.html', {'msg': msg})


def index(request):
    print(request.session.get('is_log'))
    if request.session.get('is_log', None):
        user = request.session.get('username')
        return render(request, 'index.html', {'user': user})
    else:
        return redirect('/login/')


def bb(request):
    return redirect('/login/')

2.工具:pycharm 工具栏【Tools】–>Run manage.py
task(点击)在界面输入:startapp web(app名称)

2.工具:pycharm 工具栏【Tools】–>Run manage.py
task(点击)在界面输入:startapp web(app名称)

index.html

django目录(django的形式是M电视机):

django目录(django的情势是M电视):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
欢迎 {{ user }}!
</body>
</html>

亚洲必赢官网 1

亚洲必赢官网 2

login.html

新建的应用程式目录缺乏Template,能够采纳集体的templates目录,也可根据自身的实际须要新建

新建的应用软件目录贫乏Template,能够运用公共的templates目录,也可依据本身的实在要求新建

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<form action="/login/" method="post">
    {% csrf_token %}
    <div>
        <laber for="user">用户名</laber>
        <input id="user" type="text" name="user"/>
    </div>
    <div>
        <laber for="pwd">密码</laber>
        <input id="pwd" type="password" name="pwd">
    </div>
    <div>
        <input type="submit" value="登录">
    </div>
</form>
</body>
</html>

三、启动

三、启动

注意:由于我们将session存于数据库中之所以要实践python manage.py
makemigrations 后再履行python manage.py migrate成立数据表。

命令行:python manage.py runserver
0.0.0.0:8000(监听全部地方,监听端口8000)

命令行:python manage.py runserver
0.0.0.0:九千(监听全数地点,监听端口九千)

亚洲必赢官网 3

亚洲必赢官网 4

亚洲必赢官网 ,pycharm:pycharm 工具栏【Tools】–>Run manage.py
task(点击)在界面输入:runserver 0.0.0.0:七千

pycharm:pycharm 工具栏【Tools】–>Run manage.py
task(点击)在界面输入:runserver 0.0.0.0:柒仟

4、服务器访问

四、服务器访问

亚洲必赢官网 5

亚洲必赢官网 6

 5、写1个最简易的hello,world页面

 五、写二个最简单易行的hello,world页面

亚洲必赢官网 7亚洲必赢官网 8

亚洲必赢官网 9亚洲必赢官网 10

from django.shortcuts import render
#导入httpresponse请求模块
from django.http import  HttpResponse
# Create your views here.

#登录页面
def index(request):
    return HttpResponse('<h1>Hello felix</h1>')
from django.shortcuts import render
#导入httpresponse请求模块
from django.http import  HttpResponse
# Create your views here.

#登录页面
def index(request):
    return HttpResponse('<h1>Hello felix</h1>')

web\views.py

web\views.py

亚洲必赢官网 11亚洲必赢官网 12

亚洲必赢官网 13亚洲必赢官网 14

from django.conf.urls import url
from django.contrib import admin
from web.views import index

urlpatterns = [

    url(r'^admin/', admin.site.urls),
     #url映射
    url(r'^index/', index),
]
from django.conf.urls import url
from django.contrib import admin
from web.views import index

urlpatterns = [

    url(r'^admin/', admin.site.urls),
     #url映射
    url(r'^index/', index),
]

项目名称\urls.py

项目名称\urls.py

6、不用重启访问

陆、不用重启访问

亚洲必赢官网 15

亚洲必赢官网 16

七、动态路由

7、动态路由

亚洲必赢官网 17

亚洲必赢官网 18

亚洲必赢官网 19亚洲必赢官网 20

亚洲必赢官网 21亚洲必赢官网 22

1、每个路由规则对应一个view中的函数
url(r'^index/(\d*)', views.index),
url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),
url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}),
2、根据app对路由规则进行一次分类
url(r'^web/',include('web.urls')),
1、每个路由规则对应一个view中的函数
url(r'^index/(\d*)', views.index),
url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),
url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}),
2、根据app对路由规则进行一次分类
url(r'^web/',include('web.urls')),

有关代码

连带代码

 8、简洁的动态路由(通过反射机制)

 八、简洁的动态路由(通过反射机制)

亚洲必赢官网 23亚洲必赢官网 24

亚洲必赢官网 25亚洲必赢官网 26

django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁
django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁

何以要切中时弊

怎么要从简

9、数据库的接二连三访问(模型相关)

玖、数据库的连年访问(模型相关)

1.数据库配置

1.数据库配置

亚洲必赢官网 27亚洲必赢官网 28

亚洲必赢官网 29亚洲必赢官网 30

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'test',
    'USER': 'felix',
    'PASSWORD': '123456',
    'HOST': '192.168.189.132',
    'PORT': '3306',
    }
}
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'test',
    'USER': 'felix',
    'PASSWORD': '123456',
    'HOST': '192.168.189.132',
    'PORT': '3306',
    }
}

settings.py

settings.py

2.Codefist实现

2.Codefist实现

   一).成立数据库

   一).创设数据库

   二).配置文件settings.py连接数据库

   二).配置文件settings.py连接数据库

 3).创建model,继承自modes.Model类:

 3).创建model,继承自modes.Model类:

亚洲必赢官网 31亚洲必赢官网 32

亚洲必赢官网 33亚洲必赢官网 34

from django.db import models

class userinfo(models.Model):
    name = models.CharField(max_length=30)
    email = models.EmailField()
    memo = models.TextField()
from django.db import models

class userinfo(models.Model):
    name = models.CharField(max_length=30)
    email = models.EmailField()
    memo = models.TextField()

创建model

创建model

亚洲必赢官网 35亚洲必赢官网 36

亚洲必赢官网 37亚洲必赢官网 38

1、models.AutoField  自增列 = int(11)
  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField  字符串字段
  必须 max_length 参数
3、models.BooleanField  布尔类型=tinyint(1)
  不能为空,Blank=True
4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
  继承CharField,所以必须 max_lenght 参数
5、models.DateField  日期类型 date
  对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField  日期类型 datetime
  同DateField的参数
7、models.Decimal  十进制小数类型 = decimal
  必须指定整数位max_digits和小数位decimal_places
8、models.EmailField  字符串类型(正则表达式邮箱) =varchar
  对字符串进行正则表达式
9、models.FloatField  浮点类型 = double
10、models.IntegerField  整形
11、models.BigIntegerField  长整形
  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
12、models.IPAddressField  字符串类型(ip4正则表达式)
13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
  参数protocol可以是:both、ipv4、ipv6
  验证时,会根据设置报错
14、models.NullBooleanField  允许为空的布尔类型
15、models.PositiveIntegerFiel  正Integer
16、models.PositiveSmallIntegerField  正smallInteger
17、models.SlugField  减号、下划线、字母、数字
18、models.SmallIntegerField  数字
  数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField  字符串=longtext
20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField  字符串,地址正则表达式
22、models.BinaryField  二进制<br>23、models.ImageField   图片<br>24、models.FilePathField 文件
1、models.AutoField  自增列 = int(11)
  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField  字符串字段
  必须 max_length 参数
3、models.BooleanField  布尔类型=tinyint(1)
  不能为空,Blank=True
4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
  继承CharField,所以必须 max_lenght 参数
5、models.DateField  日期类型 date
  对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField  日期类型 datetime
  同DateField的参数
7、models.Decimal  十进制小数类型 = decimal
  必须指定整数位max_digits和小数位decimal_places
8、models.EmailField  字符串类型(正则表达式邮箱) =varchar
  对字符串进行正则表达式
9、models.FloatField  浮点类型 = double
10、models.IntegerField  整形
11、models.BigIntegerField  长整形
  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
12、models.IPAddressField  字符串类型(ip4正则表达式)
13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
  参数protocol可以是:both、ipv4、ipv6
  验证时,会根据设置报错
14、models.NullBooleanField  允许为空的布尔类型
15、models.PositiveIntegerFiel  正Integer
16、models.PositiveSmallIntegerField  正smallInteger
17、models.SlugField  减号、下划线、字母、数字
18、models.SmallIntegerField  数字
  数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField  字符串=longtext
20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField  字符串,地址正则表达式
22、models.BinaryField  二进制<br>23、models.ImageField   图片<br>24、models.FilePathField 文件

更多model字段

更多model字段

亚洲必赢官网 39亚洲必赢官网 40

亚洲必赢官网 41亚洲必赢官网 42

1、null=True
  数据库中字段是否可以为空
2、blank=True
  django的 Admin 中添加数据时是否可允许空值
3、primary_key = False
  主键,对AutoField设置主键后,就会代替原来的自增 id 列
4、auto_now 和 auto_now_add
  auto_now   自动创建---无论添加或修改,都是当前操作的时间
  auto_now_add  自动创建---永远是创建时的时间
5、choices
GENDER_CHOICE = (
        (u'M', u'Male'),
        (u'F', u'Female'),
    )
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
6、max_length
7、default  默认值
8、verbose_name  Admin中字段的显示名称
9、name|db_column  数据库中的字段名称
10、unique=True  不允许重复
11、db_index = True  数据库索引
12、editable=True  在Admin里是否可编辑
13、error_messages=None  错误提示
14、auto_created=False  自动创建
15、help_text  在Admin中提示帮助信息
16、validators=[]
17、upload-to
1、null=True
  数据库中字段是否可以为空
2、blank=True
  django的 Admin 中添加数据时是否可允许空值
3、primary_key = False
  主键,对AutoField设置主键后,就会代替原来的自增 id 列
4、auto_now 和 auto_now_add
  auto_now   自动创建---无论添加或修改,都是当前操作的时间
  auto_now_add  自动创建---永远是创建时的时间
5、choices
GENDER_CHOICE = (
        (u'M', u'Male'),
        (u'F', u'Female'),
    )
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
6、max_length
7、default  默认值
8、verbose_name  Admin中字段的显示名称
9、name|db_column  数据库中的字段名称
10、unique=True  不允许重复
11、db_index = True  数据库索引
12、editable=True  在Admin里是否可编辑
13、error_messages=None  错误提示
14、auto_created=False  自动创建
15、help_text  在Admin中提示帮助信息
16、validators=[]
17、upload-to

越多字段参数

越来越多字段参数

亚洲必赢官网 43亚洲必赢官网 44

亚洲必赢官网 45亚洲必赢官网 46

一对多,models.ForeignKey(ColorDic)
一对一,models.OneToOneField(OneModel)
多对多,authors = models.ManyToManyField(Author)
应用场景:
一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了)。
例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据。
一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)。
例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。
多对多:在某表中创建一行数据是,有一个可以多选的下拉框。
例如:创建用户信息,需要为用户指定多个爱好。
一对多,models.ForeignKey(ColorDic)
一对一,models.OneToOneField(OneModel)
多对多,authors = models.ManyToManyField(Author)
应用场景:
一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了)。
例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据。
一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)。
例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。
多对多:在某表中创建一行数据是,有一个可以多选的下拉框。
例如:创建用户信息,需要为用户指定多个爱好。

库中表与表的涉嫌

库中表与表的关联

   4).python manage.py makemigrations  ; python manage.py migrate

   4).python manage.py makemigrations  ; python manage.py migrate

亚洲必赢官网 47亚洲必赢官网 48

亚洲必赢官网 49亚洲必赢官网 50

class UserInfo(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)
    gender = models.BooleanField(default=False)
    age = models.IntegerField(default=19)
    memo = models.TextField(default='xxx')
    createdate = models.DateTimeField(default='2017-09-30')
class UserInfo(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)
    gender = models.BooleanField(default=False)
    age = models.IntegerField(default=19)
    memo = models.TextField(default='xxx')
    createdate = models.DateTimeField(default='2017-09-30')

models.py模型扩大数据库操作,新建表

models.py模型扩展数据库操作,新建表

亚洲必赢官网 51亚洲必赢官网 52

亚洲必赢官网 53亚洲必赢官网 54

执行遇到的错误解决:
错误:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'.
Did you install mysqlclient or MySQL-python?
解决(python3.6 连接mysql数据库):
参考:http://www.cnblogs.com/hank-chen/p/6624299.html
由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 pymysql 模块。
pymysql 模块可以通过 pip 安装。但如果你使用的是 pycharm IDE,则可以使用 project python 安装第三方模块。
[File] >> [settings] >> [Project: python] >> [Project Interpreter] >> [Install按钮]

此时django要想访问数据库?在__init_.py下增加以下内容:
import pymysql
pymysql.install_as_MySQLdb()
执行遇到的错误解决:
错误:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'.
Did you install mysqlclient or MySQL-python?
解决(python3.6 连接mysql数据库):
参考:http://www.cnblogs.com/hank-chen/p/6624299.html
由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 pymysql 模块。
pymysql 模块可以通过 pip 安装。但如果你使用的是 pycharm IDE,则可以使用 project python 安装第三方模块。
[File] >> [settings] >> [Project: python] >> [Project Interpreter] >> [Install按钮]

此时django要想访问数据库?在__init_.py下增加以下内容:
import pymysql
pymysql.install_as_MySQLdb()

No module named ‘MySQLdb’  

No module named ‘MySQLdb’  

亚洲必赢官网 55 亚洲必赢官网 56

亚洲必赢官网 57 亚洲必赢官网 58

5).修改model(增、删、改、查)

5).修改model(增、删、改、查)

亚洲必赢官网 59亚洲必赢官网 60

亚洲必赢官网 61亚洲必赢官网 62

增加:创建实例,并调用save
更新:a.获取实例,再sava;b.update(指定列)
删除:a. filter().delete(); b.all().delete()
获取:a. 单个=get(id=1) ;b. 所有 = all()
过滤:filter(name='xxx');filter(name__contains='');(id__in = [1,2,3]) ;
icontains(大小写无关的LIKE),startswith和endswith, 还有range(SQLBETWEEN查询)'gt', 'in', 'isnull', 'endswith', 'contains', 'lt', 'startswith', 'iendswith', 'icontains','range', 'istartswith'
排序:order_by("name") =asc ;order_by("-name")=desc
返回第n-m条:第n条[0];前两条[0:2]
指定映射:values
数量:count()
聚合:from django.db.models import Min,Max,Sum objects.all().aggregate(Max('guest_id'))
原始SQL
cursor = connection.cursor()
cursor.execute('''SELECT DISTINCT first_name ROM people_person WHERE last_name = %s""", ['Lennon'])
row = cursor.fetchone() 
增加:创建实例,并调用save
更新:a.获取实例,再sava;b.update(指定列)
删除:a. filter().delete(); b.all().delete()
获取:a. 单个=get(id=1) ;b. 所有 = all()
过滤:filter(name='xxx');filter(name__contains='');(id__in = [1,2,3]) ;
icontains(大小写无关的LIKE),startswith和endswith, 还有range(SQLBETWEEN查询)'gt', 'in', 'isnull', 'endswith', 'contains', 'lt', 'startswith', 'iendswith', 'icontains','range', 'istartswith'
排序:order_by("name") =asc ;order_by("-name")=desc
返回第n-m条:第n条[0];前两条[0:2]
指定映射:values
数量:count()
聚合:from django.db.models import Min,Max,Sum objects.all().aggregate(Max('guest_id'))
原始SQL
cursor = connection.cursor()
cursor.execute('''SELECT DISTINCT first_name ROM people_person WHERE last_name = %s""", ['Lennon'])
row = cursor.fetchone() 

表的增删改查

表的增删改查

亚洲必赢官网 63亚洲必赢官网 64

亚洲必赢官网 65亚洲必赢官网 66

"""oldboy08day11 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from web.views import index,login,list,add,delete,piliang_update,update,get

#路由系统
urlpatterns = [

    url(r'^admin/', admin.site.urls),

    #url映射,url对应函数
    url(r'^index/', index),
    url(r'^login/', login),
    #动态的URL(配合正则表达式)
    # url(r'^list/(\d*)', list),
    # url(r'^list/(\d*)/(\d*)', list1),
    url(r'^add/(?P<name>\d*)/', add),
    url(r'^delete/(?P<id>\d*)/', delete),
    url(r'^update/(?P<id>\d*)/(?P<hostname>\w*)/$', update),
    url(r'^piliang_update/(?P<id>\d*)/(?P<hostname>\w*)/$', piliang_update),
    url(r'^get/(?P<hostname>\w*)/$', get),

]
"""oldboy08day11 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from web.views import index,login,list,add,delete,piliang_update,update,get

#路由系统
urlpatterns = [

    url(r'^admin/', admin.site.urls),

    #url映射,url对应函数
    url(r'^index/', index),
    url(r'^login/', login),
    #动态的URL(配合正则表达式)
    # url(r'^list/(\d*)', list),
    # url(r'^list/(\d*)/(\d*)', list1),
    url(r'^add/(?P<name>\d*)/', add),
    url(r'^delete/(?P<id>\d*)/', delete),
    url(r'^update/(?P<id>\d*)/(?P<hostname>\w*)/$', update),
    url(r'^piliang_update/(?P<id>\d*)/(?P<hostname>\w*)/$', piliang_update),
    url(r'^get/(?P<hostname>\w*)/$', get),

]

代码:web\urls.py

代码:web\urls.py

亚洲必赢官网 67亚洲必赢官网 68

亚洲必赢官网 69亚洲必赢官网 70

from django.shortcuts import render
#导入httpresponse请求模块
from django.http import  HttpResponse
#对数据库表进行操作
from web.models import Asset
# Create your views here.

#登录页面
def index(request):
    return HttpResponse('<h1>Hello World!!!</h1>')

def login(request):
    return HttpResponse('<h1>Hello World!!!</h1>')

def list(request,id):
    print(id)
    return HttpResponse('<h1>list</h1>')

#对数据库表进行操作
def add(request,name):
    Asset.objects.create(hostname=name)
    return HttpResponse('add ok')

#删除
def delete(request,id):
    Asset.objects.get(id=id).delete()
    return HttpResponse('delete ok')
#修改
def update(request,id,hostname):
    obj = Asset.objects.get(id=id)
    obj.hostname = hostname
    obj.save()
    return HttpResponse('update ok')
#批量修改
def piliang_update(request,id,hostname):
    Asset.objects.filter(id__gt=id).update(hostname=hostname)
    return HttpResponse('piliang_update ok')

#模糊查找
def get(request,hostname):
    assetlist = Asset.objects.filter(hostname__contains=hostname)
    print(assetlist)
    return HttpResponse('GET ok')

#需求一、获取所有的数据 (通过filter id>0)
#方法一:
def get_all(request,hostname):
    assetlist = Asset.objects.filter(id__gt=0)
    print(assetlist) #界面暂时无法不显示,先打印分析
    return HttpResponse('GET_all ok')
#方法2:
def get_alldata(request,hostname):
    assetlist = Asset.objects.all()
    assetlist = Asset.objects.all().values('id') #取某一个字段
    print(assetlist) #界面暂时无法不显示,先打印分析
    print(assetlist.query) #打印select语句
    return HttpResponse('get_alldata ok')
#需求二、获取所有数据的前两行
def get_alldata_2row(request,hostname):
    assetlist = Asset.objects.all()[0:2]
    print(assetlist) #界面暂时无法不显示,先打印分析
    return HttpResponse('get_alldata_2row ok')

#需求三、排序
def get_alldata_orderby(request,hostname):
    assetlist = Asset.objects.all().order_by('-id') #横杠指倒叙
    print(assetlist) #界面暂时无法不显示,先打印分析
    return HttpResponse('get_alldata_orderby ok')
from django.shortcuts import render
#导入httpresponse请求模块
from django.http import  HttpResponse
#对数据库表进行操作
from web.models import Asset
# Create your views here.

#登录页面
def index(request):
    return HttpResponse('<h1>Hello World!!!</h1>')

def login(request):
    return HttpResponse('<h1>Hello World!!!</h1>')

def list(request,id):
    print(id)
    return HttpResponse('<h1>list</h1>')

#对数据库表进行操作
def add(request,name):
    Asset.objects.create(hostname=name)
    return HttpResponse('add ok')

#删除
def delete(request,id):
    Asset.objects.get(id=id).delete()
    return HttpResponse('delete ok')
#修改
def update(request,id,hostname):
    obj = Asset.objects.get(id=id)
    obj.hostname = hostname
    obj.save()
    return HttpResponse('update ok')
#批量修改
def piliang_update(request,id,hostname):
    Asset.objects.filter(id__gt=id).update(hostname=hostname)
    return HttpResponse('piliang_update ok')

#模糊查找
def get(request,hostname):
    assetlist = Asset.objects.filter(hostname__contains=hostname)
    print(assetlist)
    return HttpResponse('GET ok')

#需求一、获取所有的数据 (通过filter id>0)
#方法一:
def get_all(request,hostname):
    assetlist = Asset.objects.filter(id__gt=0)
    print(assetlist) #界面暂时无法不显示,先打印分析
    return HttpResponse('GET_all ok')
#方法2:
def get_alldata(request,hostname):
    assetlist = Asset.objects.all()
    assetlist = Asset.objects.all().values('id') #取某一个字段
    print(assetlist) #界面暂时无法不显示,先打印分析
    print(assetlist.query) #打印select语句
    return HttpResponse('get_alldata ok')
#需求二、获取所有数据的前两行
def get_alldata_2row(request,hostname):
    assetlist = Asset.objects.all()[0:2]
    print(assetlist) #界面暂时无法不显示,先打印分析
    return HttpResponse('get_alldata_2row ok')

#需求三、排序
def get_alldata_orderby(request,hostname):
    assetlist = Asset.objects.all().order_by('-id') #横杠指倒叙
    print(assetlist) #界面暂时无法不显示,先打印分析
    return HttpResponse('get_alldata_orderby ok')

代码:web\views.py

代码:web\views.py

亚洲必赢官网 71亚洲必赢官网 72

亚洲必赢官网 73亚洲必赢官网 74

from django.db import models

# Create your models here.


class UserInfo(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)
    gender = models.BooleanField(default=False)
    age = models.IntegerField(default=19)
    memo = models.TextField(default='xxx')
    createdate = models.DateTimeField(default='2017-09-30')

#字段参数
class Args(models.Model):
    name = models.CharField(max_length=20,null=True)
    not_name = models.CharField(max_length=30,null=False)

#通过auto_now等参数,以后数据新增更新的时候系统会自动补时间
class Asset(models.Model):
    hostname = models.CharField(max_length=256)
    create_date = models.DateTimeField(auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True)

#会自动为usertype自动不填1,2,3,
class Temp(models.Model):
    GENDER_CHOICE = ((u'1',u'普通用户'),(u'2',u'管理员'),(u'3',u'超级用户'))
    usetype= models.CharField(max_length=2,choices=GENDER_CHOICE)
from django.db import models

# Create your models here.


class UserInfo(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)
    gender = models.BooleanField(default=False)
    age = models.IntegerField(default=19)
    memo = models.TextField(default='xxx')
    createdate = models.DateTimeField(default='2017-09-30')

#字段参数
class Args(models.Model):
    name = models.CharField(max_length=20,null=True)
    not_name = models.CharField(max_length=30,null=False)

#通过auto_now等参数,以后数据新增更新的时候系统会自动补时间
class Asset(models.Model):
    hostname = models.CharField(max_length=256)
    create_date = models.DateTimeField(auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True)

#会自动为usertype自动不填1,2,3,
class Temp(models.Model):
    GENDER_CHOICE = ((u'1',u'普通用户'),(u'2',u'管理员'),(u'3',u'超级用户'))
    usetype= models.CharField(max_length=2,choices=GENDER_CHOICE)

代码:web\modes.py

代码:web\modes.py

6). 改完后在进行4即可

陆). 改完后在履行四即可

十、模板

十、模板

一.运作流程图精通

1.周转流程图通晓

 亚洲必赢官网 75

 亚洲必赢官网 76

亚洲必赢官网 77亚洲必赢官网 78

亚洲必赢官网 79亚洲必赢官网 80

模板中也有自己的语言,该语言可以实现数据展示

{{ item }}

{% for item in item_list %}  
    <a>{{ item }}</a> 
{% endfor %}

  forloop.counter
  forloop.first
  forloop.last 
{% if ordered_warranty %}  
{% else %} 
{% endif %}
母板:{% block title %} {% endblock %}
子板:{% extends "base.html" %}
   {% block title %} {% endblock %}
帮助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}}
{{ bio|truncatewords:"30" }}
{{ my_list|first|upper }}
{{ name|lower }}
模板中也有自己的语言,该语言可以实现数据展示

{{ item }}

{% for item in item_list %}  
    <a>{{ item }}</a> 
{% endfor %}

  forloop.counter
  forloop.first
  forloop.last 
{% if ordered_warranty %}  
{% else %} 
{% endif %}
母板:{% block title %} {% endblock %}
子板:{% extends "base.html" %}
   {% block title %} {% endblock %}
帮助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}}
{{ bio|truncatewords:"30" }}
{{ my_list|first|upper }}
{{ name|lower }}

模板语言

模板语言

亚洲必赢官网 81亚洲必赢官网 82

亚洲必赢官网 83亚洲必赢官网 84

a、在app中创建templatetags文件夹

b、创建任意 .py 文件,如:xxx.py
#!/usr/local/bin/python3
#-*-coding:utf-8 -*-
#Author:Felix Song ;Environment:pycharm 5.0.3(python3.6)

from django import template
from django.utils.safestring import mark_safe
from django.template.base import resolve_variable, Node, TemplateSyntaxError

register = template.Library()

@register.simple_tag
def my_method(v1):
    return  v1*1000

@register.simple_tag
def my_input(id,arg):
    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    return mark_safe(result)
c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名,放置位置如下
<!DOCTYPE html>
{% load xxx %} 
<html lang="en">

d、使用simple_tag(多个参数可用空格隔开)
{% 帮助方法名称 参数 %}
{% my_input 'id_username' 'hide'%}

e、再settings中配置当前app,不然django无法找到自定义的simple_tag
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    '自己的APP名称',
)
a、在app中创建templatetags文件夹

b、创建任意 .py 文件,如:xxx.py
#!/usr/local/bin/python3
#-*-coding:utf-8 -*-
#Author:Felix Song ;Environment:pycharm 5.0.3(python3.6)

from django import template
from django.utils.safestring import mark_safe
from django.template.base import resolve_variable, Node, TemplateSyntaxError

register = template.Library()

@register.simple_tag
def my_method(v1):
    return  v1*1000

@register.simple_tag
def my_input(id,arg):
    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    return mark_safe(result)
c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名,放置位置如下
<!DOCTYPE html>
{% load xxx %} 
<html lang="en">

d、使用simple_tag(多个参数可用空格隔开)
{% 帮助方法名称 参数 %}
{% my_input 'id_username' 'hide'%}

e、再settings中配置当前app,不然django无法找到自定义的simple_tag
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    '自己的APP名称',
)

通过simple_tag达成模版语言中的帮忙方法

通过simple_tag达成模版语言中的扶助方法

二.子母板运用:

二.子母板运用:

 亚洲必赢官网 85

 亚洲必赢官网 86

亚洲必赢官网 87亚洲必赢官网 88

亚洲必赢官网 89亚洲必赢官网 90

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页面</title>
</head>
<body>
    <div>公用的头部</div>
    <div>
        {% block content %}

        {% endblock %}
    </div>
    <div>公用的底部</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页面</title>
</head>
<body>
    <div>公用的头部</div>
    <div>
        {% block content %}

        {% endblock %}
    </div>
    <div>公用的底部</div>
</body>
</html>

母版:base.html

母版:base.html

亚洲必赢官网 91亚洲必赢官网 92

亚洲必赢官网 93亚洲必赢官网 94

{% extends 'base.html' %}
{% block content %}
 {# 将定义的用户数据传入#}
    <h1>{{ user }}</h1>
    {#将数据库获取的数据传入#}
    <table border="2" >
        {#运用模板#}
        {% for item in data %}
             <tr>
                <td>{{  item.id }}</td>
                {#<td>{%  my_method item.id %}</td>#}
                <td>{{ item.hostname }}</td>
                <td>{{ item.create_date|date:"Y-m-d H:i:s" }}</td>
                <td>{{ item.update_date|date:"Y-m-d H:i:s" }}</td>
            </tr>
        {% endfor %}
    </table>
     {% if user %}
            <h1>真</h1>
        {% else %}
            <h1>假</h1>
        {% endif %}
{% endblock %}
{% extends 'base.html' %}
{% block content %}
 {# 将定义的用户数据传入#}
    <h1>{{ user }}</h1>
    {#将数据库获取的数据传入#}
    <table border="2" >
        {#运用模板#}
        {% for item in data %}
             <tr>
                <td>{{  item.id }}</td>
                {#<td>{%  my_method item.id %}</td>#}
                <td>{{ item.hostname }}</td>
                <td>{{ item.create_date|date:"Y-m-d H:i:s" }}</td>
                <td>{{ item.update_date|date:"Y-m-d H:i:s" }}</td>
            </tr>
        {% endfor %}
    </table>
     {% if user %}
            <h1>真</h1>
        {% else %}
            <h1>假</h1>
        {% endif %}
{% endblock %}

子版:index.html

子版:index.html

三.声援方法: 

叁.帮手方法: 

亚洲必赢官网 95亚洲必赢官网 96

亚洲必赢官网 97亚洲必赢官网 98

{% extends 'base.html' %}
{% block content %}
{% load help_method %}
 {# 将定义的用户数据传入#}
    <h1>{{ user }}</h1>
    {#将数据库获取的数据传入#}
    <table border="2" >
        {#运用模板#}
        {% for item in data %}
             <tr>
{#                <td>{{  item.id }}</td>#}
                <td>{%  my_method item.id %}</td>
                <td>{{ item.hostname }}</td>
                <td>{{ item.create_date|date:"Y-m-d H:i:s" }}</td>
                <td>{{ item.update_date|date:"Y-m-d H:i:s" }}</td>
            </tr>
        {% endfor %}
    </table>
     {% if user %}
            <h1>真</h1>
        {% else %}
            <h1>假</h1>
        {% endif %}
{% endblock %}
{% extends 'base.html' %}
{% block content %}
{% load help_method %}
 {# 将定义的用户数据传入#}
    <h1>{{ user }}</h1>
    {#将数据库获取的数据传入#}
    <table border="2" >
        {#运用模板#}
        {% for item in data %}
             <tr>
{#                <td>{{  item.id }}</td>#}
                <td>{%  my_method item.id %}</td>
                <td>{{ item.hostname }}</td>
                <td>{{ item.create_date|date:"Y-m-d H:i:s" }}</td>
                <td>{{ item.update_date|date:"Y-m-d H:i:s" }}</td>
            </tr>
        {% endfor %}
    </table>
     {% if user %}
            <h1>真</h1>
        {% else %}
            <h1>假</h1>
        {% endif %}
{% endblock %}

templates\index.html(子版)

templates\index.html(子版)

亚洲必赢官网 99亚洲必赢官网 100

亚洲必赢官网 101亚洲必赢官网 102

#!/usr/local/bin/python3
#-*-coding:utf-8 -*-
#Author:Felix Song ;Environment:pycharm 5.0.3(python3.6)

from django import template
from django.utils.safestring import mark_safe
# from django.template.base import resolve_variable, Node, TemplateSyntaxError

register = template.Library()
@register.simple_tag
def my_method(v1):
    return  v1*1000
#!/usr/local/bin/python3
#-*-coding:utf-8 -*-
#Author:Felix Song ;Environment:pycharm 5.0.3(python3.6)

from django import template
from django.utils.safestring import mark_safe
# from django.template.base import resolve_variable, Node, TemplateSyntaxError

register = template.Library()
@register.simple_tag
def my_method(v1):
    return  v1*1000

zyxt\templatestags\help_method.py

zyxt\templatestags\help_method.py

执行救助方法前的功力:

实施救助方法前的效果:

亚洲必赢官网 103

亚洲必赢官网 104

推行救助方法后的效应:

执行救助方法后的意义:

 亚洲必赢官网 105

 亚洲必赢官网 106

 

 

 十一、Django admin的使用

 十一、Django admin的使用

10二、关于静态文件不见效的题材可参看:

102、关于静态文件不见效的题材可参看:

注:根据网上的各自方法设置后仍不见效,然后正是重命名statics的文件名称叫common-statics然后,pycharm提醒:

注:依据网上的个别方法设置后仍不见效,然后正是重命名statics的文件名字为common-statics然后,pycharm提示:

亚洲必赢官网 107

亚洲必赢官网 108

然后按Do Refactor重新定位后就找着了,比较烦躁。。。

然后按Do Refactor重新定位后就找着了,相比烦躁。。。

重新命名完的setting.py内容:

重新命名完的setting.py内容:

亚洲必赢官网 109

亚洲必赢官网 110

 

 

 

 

 

 

 

 

参考:

参考:

网站地图xml地图