一.Django基本   程序编写

a. url.py        /index/    ->   func

b. views.py

def func(request):     # 包含所有的请求数据

...

return HttpResponse('字符串')

return render(request, 'index.html', {'替换':替换})

retrun redirect('URL')

c. 模板语言

return render(request, 'index.html', {'li': [11,22,33]})

{% for item in li %}

<h1>{{item}}</h1>

{% endfor %}

***********  索引用点 **********

<h2> {{item.0 }} </h2>

二 视图函数   views.py

  1、获取用户请求数据
    request.GET
    request.POST
    request.FILES  获取文件
      PS:
     GET:获取数据   刷新的时候都是get    
     POST:提交数据
   
 2、checkbox、radio等多选的内容
    request.POST.getlist()
 3、上传文件
  # 上传文件,form标签做特殊设置  <form action="/login/" method="POST" enctype="multipart/form-data">
    obj = request.FILES.get('fafafa')
    f = open(obj.name, mode='wb')
    for item in obj.chunks():
       f.write(item)
    f.close()

示例:

多选框html示例

 <body>
     <form action="/login/" method="POST" enctype="multipart/form-data">
         <p>
             <input type="text" name="user" placeholder="用户名" />
         </p>
         <p>
             <input type="password" name="pwd" placeholder="密码" />
         </p>
         <p>
             男:<input type="radio"  name="gender" value="1"/>单选
             女:<input type="radio" name="gender" value="2"/>
             张扬:<input type="radio" name="gender" value="3"/>
         </p>
         <p>
             男:<input type="checkbox"  name="favor" value="11"/>多选
             女:<input type="checkbox" name="favor" value="22"/>
             张扬:<input type="checkbox" name="favor" value="33"/>
         </p>
         <p>
             <select name="city" multiple>   多选
                 <option value="sh">上海</option>
                 <option value="bj">北京</option>
                 <option value="tj">天津</option>
             </select>
         </p>
         <p>
             <input type="file" name="fafafa"/>
         </p>

         <input type="submit" value="提交"/>
     </form>
 </body>

  数据获取方式:获取多个用getlist;上传文件

 def login(request):
     if request.method == "GET":
         return render(request, 'login.html')
     elif request.method == "POST":
         # radio   获取单个value
         # v = request.POST.get('gender')
         # print(v)
         #checkbox多选  获取多个value
         # v = request.POST.getlist('favor')
         # print(v)
         # v = request.POST.get('fafafa')
         # print(v)
         #获取文件
         obj = request.FILES.get('fafafa')  #'fafafa'是html中的name
         print(obj,type(obj),obj.name)
         import os
         file_path = os.path.join('upload', obj.name)#指定文件存放目录
         f = open(file_path, mode="wb")
         for i in obj.chunks(): #chunks是method的一个函数,它存放上传的文件,可以从它里边取数据
             f.write(i)
         f.close()

         from django.core.files.uploadedfile import InMemoryUploadedFile
         return render(request, 'login.html')
     else:
         # PUT,DELETE,HEAD,OPTION...
         return redirect('/index/')

三、Django两种模式  FBV  &  CBV   (function  Base view) & (class  Base view)
   两者的主要区别就是   urls.py  与views.py

urls.py


1 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^home/', views.home), #url直接指向函数 url(r'^home/', views.Home.as_view()), #url指向Home类,这是固定写法
    url(r'^detail-(\d+)-(\d+).html', views.detail),#动态url,利用正则匹配一类url,html格式如:detail-1-2.html ]

views.py

 # def home(request):  #FBV
 #       if request.method == 'get':
 #           return HttpResponse('Home')
 #       if request.method == 'post':
 #           return HttpResponse('Home')

 from django.views import View  #CBV  必须要有这个,必须导入父类View
 class Home(View):
     # dispatch相当于助理,自动将请求分配给不同的函数来处理
     def dispatch(self, request, *args, **kwargs):  #继承的View父类中有dispatch方法,这里重写这个方法,请求最先到这个函数
         print('before')#增加新的功能print
         # 调用父类中的dispatch,反射,根据请求中的字符串,来使用不同的函数来处理请求
         result = super(Home,self).dispatch(request, *args, **kwargs)
         print('after')
         return result  #这里必须返回result

     def get(self,request):   #如果是get请求,自动执行get函数
         print(request.method)
         return render(request, 'home.html')

     def post(self,request): #如果是post请求,自动执行post函数
         print(request.method,'POST')
         return render(request, 'home.html')

四、Django模板语言循环字典

 {% for key,value in user_dict.items %}
     {{key}}--{{value}}
 {%  endfor %}

 注意,模板语言里key  value items都没有括号,这里user_dict是字典

五、路由系统url匹配的三种方式

  1.匹配一类url,并将url中的参数赋给相应变量(正则)

  urls.py

 url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail),

 对于接收到并匹配的url:xxx/detail-3-6.html,会将第一个3赋给nid(因为nid在第一个),6赋给uid,并以(nid=3,uid=6)这样的形式传给views.py

views.py

 def detail(request, nid,uid):
        print(nid,uid)
        return render(request, 'user_detail.html', {'obj': obj})

 不论nid和uid这俩变量的位置怎样变化,从urls.py接收到的数据永远是nid=3,uid=6
优化:
def detail(request, *args,**kwargs): #不论url中有多少参数,形如url(r'^detail-(\d+).html', views.detail)这样的url,
会将参数传递给*args;形如url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail)这样的url会将参数传递给**kwargs,
    **kwargs只接收字典参数(nid=3,uid=6)
  print(args)  获取单个参数,这里是获取到一个元组(1,2,3,4)
  print(kwargs)获取到字典参数 {'nid':3,'uid':9}
  nid = kwargs['nid']  #获取字典参数
  uid = kwargs['uid']

  2.一 一对应:

 url(r'^index/', views.index),  #FBV
  url(r'^home/', views.Home.as_view()), #CBV

  3.匹配一类url(正则)

 url(r'^detail-(\d+).html', views.detail),

六、Django对应的路由名称,生成自定义url
  由于业务需要,可能经常要更改url,导致html中的action也要做出相应改变,应用name属性后,就不用这么麻烦了 

name对URL路由关系进行命名, ***** 以后可以根据name生成自己想要的URL *****
  有以下三种命名方式:
  url(r'^asdfasdfasdf/', views.index, name='i1'),
  url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'),
  url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
  
  生成自定义url的两种方式:
  第一种,可以通过views.py函数生成
  通过views.py中的函数来生成相应url
  def func(request, *args, **kwargs):
   from django.urls import reverse#需要导入reverse这个模块,通过name反解url
   
   url1 = reverse('i1')                              # asdfasdfasdf/
   url2 = reverse('i2', args=(1,2,))                 # 生成yug/1/2/  reverse模块只能获取到/前边的内容,
                                                                             后边的只能加自定义参数
   url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
  
  第二种,通过模板语言来生成
  xxx.html
   <form action="{ % url 'i1' % }" method="post">  #实际用法
   {% url "i1" %}               # asdfasdfasdf/
   {% url "i2" 1 2 %}           # yug/1/2/
   {% url "i3" pid=1 nid=9 %}   # buy/1/9/
  
  注:
   # 获取当前的URL用
   request.path_info

七、路由分发,在project的urls.py中指定app的urls

#project  urls.py

 #project  urls.py

 from django.conf.urls import url,include  #需要include模块
 from django.contrib import admin

 urlpatterns = [
     url(r'^admin/', admin.site.urls),
     url(r'^cmdb/', include("app01.urls")),  #指定app路由
     url(r'^monitor/', include("app02.urls")),
 ]

#app1 urls.py

 from app01 import views

 urlpatterns = [
     url(r'^login/', views.login),
     url(r'^index/', views.index),
 ]

  #app1 urls.py

 from app01 import views

 urlpatterns = [
     url(r'^login/', views.login),
     url(r'^index/', views.index),
 ]

八、Django创建表,使用mysql
  1.setting.py

 DATABASES = {
     'default': {
     'ENGINE': 'django.db.backends.mysql',
     'NAME':'dbname',
     'USER': 'root',
     'PASSWORD': 'xxx',
     'HOST': '',
     'PORT': '',
     }
 }

  2.创建数据库表步骤

 a. 先写类,在app下的modules中
         from django.db import models

         # app01_userinfo :   在数据库中生成的表名
         class UserInfo(models.Model):
             # id列,自增,主键
             # 用户名列,字符串类型,指定长度
             username = models.CharField(max_length=32)
             password = models.CharField(max_length=64)

     b. 注册APP

         INSTALLED_APPS = [
             'django.contrib.admin',
             'django.contrib.auth',
             'django.contrib.contenttypes',
             'django.contrib.sessions',
             'django.contrib.messages',
             'django.contrib.staticfiles',
             'app01',
         ]
     c. 执行命令
         python manage.py  makemigrations
         python manage.py  migrate

     d. ********** 注意 ***********
         Django默认使用MySQLdb模块链接MySQL,由于只有pymyql支持python3,所以要修改为使用pymysql:在project同名文件夹下的__init__文件中添加如下代码即可:
             import pymysql   #注意要用最新版本,0.7版
             pymysql.install_as_MySQLdb()

     e. 根据类自动创建数据库表
         # app下的models.py

         python manage.py  makemigrations
         python manage.py  migrate

九.Django增删改查
    在app的views.py中创建一个orm函数,这些语句也可以直接在其他函数中使用,只需要models模块即可

 from app01 import models
 def orm(request):
     # 创建,推荐用1和2两种建表方式

     models.UserInfo.objects.create(username=')

     dic = {'}
     models.UserInfo.objects.create(**dic)

     # obj = models.UserInfo(username='alex',password='123')
     # obj.save()

     # 查
     result = models.UserInfo.objects.all()  查询全部
     result = models.UserInfo.objects.filter(username=')  条件查询,相当于where
    models.User.objects.filter(id=1,name='root')#相当于and查询
     models.User.objects.filter(id__lt=1)  #条件查询,id < 1
    models.User.objects.filter(id__gte=1) #条件查询,id > 1
     models.User.objects.filter(id__gte=1) #条件查询,id >= 1
     models.User.objects.filter(id__lte=1) #条件查询,id <= 1
     dic = {'name': 'xx', 'age__gt': 19} #以字典形式查询
     models.User.objects.filter(**dic)
# # Django 查询到的结果是QuerySet ,它是一个列表[] # [obj(id,username,password),obj(id,username,password), obj(id,username,password)] for row in result: print(row.id,row.username,row.password) print(result) # 删除 models.UserInfo.objects.filter(username="alex").delete() # 更新 models.UserInfo.objects.filter(id=3).update(password=")  #按条件更改  
    models.UserInfo.objects.all().update(password="69")  #更改全部password="69"的
    dic = {'name': 'xx', 'age': 19}
     models.User.objects.filter(id__gt=1).update(**dic) #以字典形式更改

十、基于orm实现用户登录审查,从页面实现增删改查
views.py

 from django.shortcuts import render,HttpResponse,redirect
 from app01 import models

 def login(request):
     models.UserGroup.objects.create(caption='DBA')

     if request.method == "GET":
         return render(request, 'login.html')
     elif request.method == "POST":
         u = request.POST.get('user')
         p = request.POST.get('pwd')
         obj = models.UserInfo.objects.filter(username=u, password=p).first()
         if obj:  #如果能查询到数据,则为true
             return redirect('/cmdb/index/')
         else:
             return render(request, 'login.html')
     else:
         # PUT,DELETE,HEAD,OPTION...
         return redirect('/index/')

 def index(request):
     return render(request, 'index.html')

 def user_info(request):
     if request.method == "GET":  #获取用户与组
         user_list = models.UserInfo.objects.all()

         group_list = models.UserGroup.objects.all()

         return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list})
     elif request.method == 'POST':  #增加用户
         u = request.POST.get('user')
         p = request.POST.get('pwd')
         models.UserInfo.objects.create(username=u,password=p)
         return redirect('/cmdb/user_info/')
         # user_list = models.UserInfo.objects.all()
         # return render(request, 'user_info.html', {'user_list': user_list})

 def user_detail(request, nid):#查询用户详细信息
     obj = models.UserInfo.objects.filter(id=nid).first()
     # 下面这句是取单条数据,如果不存在,直接报错
     # models.UserInfo.objects.get(id=nid)
     return render(request, 'user_detail.html', {'obj': obj})

 def user_del(request, nid):  #删除用户
     models.UserInfo.objects.filter(id=nid).delete()
     return redirect('/cmdb/user_info/')  #跳转回用户信息界面

 def user_edit(request, nid): #编辑页面
     if request.method == "GET":
         obj = models.UserInfo.objects.filter(id=nid).first()
         return render(request, 'user_edit.html',{'obj': obj})
     elif request.method == "POST":
         nid = request.POST.get('id')
         u = request.POST.get('username')
         p = request.POST.get('password')
         models.UserInfo.objects.filter(id=nid).update(username=u,password=p)
         return redirect('/cmdb/user_info/')

html
登录

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
 </head>
 <body>
     <form action="/cmdb/login/" method="POST" enctype="multipart/form-data">
         <p>
             <input type="text" name="user" placeholder="用户名" />
         </p>
         <p>
             <input type="password" name="pwd" placeholder="密码" />
         </p>

         <input type="submit" value="提交"/>
     </form>
 </body>
 </html>

用户信息

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         body{
             margin: 0;
         }
         .menu{
             display: block;
             padding: 5px;

         }
     </style>
 </head>
 <body>
     <div style="height: 48px;background-color: black;color: white">
         张扬凌晨三点玩愤怒的小鸟
     </div>
     <div>
         <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
             <a class="menu" href="/cmdb/user_info/">用户管理</a>
             <a class="menu" href="/cmdb/user_group/">用户组管理</a>
         </div>
         <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">

             <h3>添加用户</h3>
             <form method="POST" action="/cmdb/user_info/">
                 <input type="text" name="user" />
                 <input type="text" name="pwd" />

                 <select name="group_id">
                     {% for item in group_list %}
                         <option value="{{ item.uid }}">{{ item.caption }}</option>
                     {% endfor %}
                 </select>

                 <input type="submit" value="添加"/>
             </form>

             <h3>用户列表</h3>
             <ul>
                 {% for row in user_list %}
                     <li>
                         <a href="/cmdb/userdetail-{{ row.id }}/">{{ row.username }}</a> |
                         <span> {{ row.user_group.caption }} </span>
                         <a href="/cmdb/userdel-{{ row.id }}/">删除</a> |
                         <a href="/cmdb/useredit-{{ row.id }}/">编辑</a>
                     </li>
                 {% endfor %}
             </ul>

         </div>

     </div>

 </body>
 </html>

单个用户详细信息

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         body{
             margin: 0;
         }
         .menu{
             display: block;
             padding: 5px;

         }
     </style>
 </head>
 <body>
     <div style="height: 48px;background-color: black;color: white">
         张扬凌晨三点玩愤怒的小鸟
     </div>
     <div>
         <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
             <a class="menu" href="/cmdb/user_info/">用户管理</a>
             <a class="menu" href="/cmdb/user_group/">用户组管理</a>
         </div>
         <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">

             <h1>用户详细信息</h1>

             <h5>{{ obj.id }}</h5>
             <h5>{{ obj.name }}</h5>
             <h5>{{ obj.password }}</h5>

         </div>

     </div>

 </body>
 </html>

用户编辑

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
     <style>
         body{
             margin: 0;
         }
         .menu{
             display: block;
             padding: 5px;

         }
     </style>
 </head>
 <body>
     <div style="height: 48px;background-color: black;color: white">
         张扬凌晨三点玩愤怒的小鸟
     </div>
     <div>
         <div style="position: absolute;top:48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
             <a class="menu" href="/cmdb/user_info/">用户管理</a>
             <a class="menu" href="/cmdb/user_group/">用户组管理</a>
         </div>
         <div style="position:absolute;top:48px;left: 210px;bottom: 0;right: 0;overflow: auto">

             <h1>编辑用户</h1>
             <form method="post" action="/cmdb/useredit-{{ obj.id }}/">
                 <input style="display: none" type="text" name="id" value="{{ obj.id }}" />
                 <input type="text" name="username" value="{{ obj.username }}" />
                 <input type="text" name="password" value="{{ obj.password }}"/>
                 <input type="submit" value="提交" />
             </form>

         </div>

     </div>

 </body>
 </html>

urls.py

 from django.conf.urls import url,include
 from django.contrib import admin
 from app01 import views

 urlpatterns = [
     url(r'^login/', views.login),
     url(r'^index/', views.index),
     url(r'^user_info/', views.user_info),
     url(r'^userdetail-(?P<nid>\d+)/', views.user_detail),
     url(r'^userdel-(?P<nid>\d+)/', views.user_del),
     url(r'^useredit-(?P<nid>\d+)/', views.user_edit),
     url(r'^orm/', views.orm),
 ]

十一、Django建表更多字段,主要是给admin用的

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  二进制
23、models.ImageField   图片
24、models.FilePathField 文件

更多字段

创建 Django 用户:python manage.py createsuperuser

十二、建表的字段参数,即后边括号里的参数

caption = models.CharField(max_length=32,unique=True)
字段的参数:
            null               -> db是否可以为空
            default            -> 默认值
            primary_key        -> 主键
            db_column          -> 列名
            db_index           -> 索引
            unique               -> 唯一索引
            unique_for_date    ->
            unique_for_month
            unique_for_year
            auto_now           -> 创建时,自动生成时间
            auto_now_add       -> 更新时,自动更新为当前时间

                # obj = UserGroup.objects.filter(id=1).update(caption='CEO')
                # obj = UserGroup.objects.filter(id=1).first()
                # obj.caption = "CEO"
                # obj.save()

            choices              -> django admin中显示下拉框,避免连表查询
            blank             -> django admin是否可以为空
            verbose_name      -> django admin显示字段中文
            editable          -> django admin是否可以被编辑
            error_messages    -> 错误信息欠  error_messages={"required": "密码不能为空",}
            help_text         -> django admin提示

示例:
class UserInfo(models.Model):
    # id列,自增,主键
    # 用户名列,字符串类型,指定长度
    # 字符串、数字、时间、二进制
    username = models.CharField(max_length=32,blank=True,verbose_name='用户名')
    password = models.CharField(max_length=60, help_text='pwd')
    email = models.CharField(max_length=60)
    test = models.EmailField(max_length=19,null=True,error_messages={'invalid': '请输入密码'})
    # user_group_id 数字
    user_group = models.ForeignKey("UserGroup",to_field='uid') # (uid,catption,ctime,uptimew)
    user_type_choices = (  #这个不存在表里,是存在内存里,在admin界面会显示下拉框
        (1, '超级用户'),
        (2, '普通用户'),
        (3, '普普通用户'),
    )
    user_type_id = models.IntegerField(choices=user_type_choices,default=1)

十三、外键关联

会自动创建5列
class UserInfo(models.Model): # id列,自增,主键 # 用户名列,字符串类型,指定长度 # 字符串、数字、时间、二进制 username = models.CharField(max_length=32,blank=True,verbose_name='用户名') password = models.CharField(max_length=60, help_text='pwd') email = models.CharField(max_length=60) test = models.EmailField(max_length=19,null=True,error_messages={'invalid': '请输入密码', },)#注意逗号 # 创建user_group这一列时,Django自动将列名改为user_group_id ,这一列中就是存的user_group表中uid的数字 user_group = models.ForeignKey("UserGroup",to_field='uid') #user_group :要关联的表, “to_field:要关联的字段”, 还可以设置默认值:该默认值是指的user_group 中to_field的值

 注意:在创建的表中还存在user_group对象,只是不可见,通过循环,还可以取user_group表中所有的值

例:

 result = models.UserInfo.objects.all()
 for row in result:
     print(row)
     #此时row中包含userinfo表的所有字段,还包括user_group表的对象,即:
     [username,password,email,test,user_group_id,user_group对象]
     print(row.username)#打印表中的username字段
     print(user_group.uid)#打印user_group表中的uid字段,还可以打印它的其他字段(uid,catption,ctime,uptimew)

十四、一对多,利用外键增加用户,详见s19—-19视频

Django (2)的更多相关文章

  1. Django(三) 模型:ORM框架、定义模型类并创建一个对应的数据库、配置Mysql数据库

    一.模型概述 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial02/ https://www.runoob.com/django/dj ...

  2. CentOS下 Django部署 nginx+uWSGI+Django(二)

    该篇内容承接CentOS下 Django部署 uWSGI+Django(一),细节流程可参考此篇内容. 1. 当前系统 CentOS Linux release 7.6.1810 Python 2.7 ...

  3. Python攻关之Django(一)

    课程简介: Django流程介绍 Django url Django view Django models Django template Django form Django admin (后台数据 ...

  4. django(一)

    Django 自称是"最适合开发有限期的完美WEB框架".本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明, ...

  5. Django(四)

    一.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? 1.Form表单提交: 提交 -> url > 函数或类中的方法 - .... HttpResp ...

  6. Django(三)

    1.Django请求的生命周期         路由系统 -> 视图函数(获取模板+数据-->渲染) -> 字符串返回给用户   2.路由系统         /index/    ...

  7. Django(二)

    一.路由系统,URL    1.url(r'^index/', views.index),            url(r'^home/', views.Home.as_view()),    2. ...

  8. Python后台开发Django(数据库)

    如果使用pymysql,则可以在view中直接import pymysql进行操作,与原操作无区别 Django数据库框架支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在s ...

  9. Python后台开发Django(启动)

    Django版本为:2.1.7 Python的web框架,MTV思想 MVC Model(模板文件,数据库操作)  view(视图模板文件  )controller(业务处理) MTV Model(模 ...

随机推荐

  1. linux基础-磁盘阵列(RAID)实例详解

    磁盘阵列(RAID)实例详解 raid技术分类 软raid技术 硬raid技术 Raid和lvm的区别 为什么选择用raid RAID详解 RAID-0 RAID-1 RAID-5 Raid-10 R ...

  2. Markdown语法

    概述 Markdown的理念是能让文档更容易读.写和随 改. 它用简洁的语法代替排版,格式语法只涵盖纯文 本可以涵盖的范围. 不在 Markdown 涵盖范围之内的标签,都可以直接在文档里面用 HTM ...

  3. java-w3c.document生成xml文件

    案例 /** * 创建和写入xml * @param xmlrootname * @param waitConverList */ private void createAndWriterXML(St ...

  4. AndroidStudio开发环境配置-Windows

    Android Studio开发环境配置-Windows 最近突发奇想,开始研究Android开发.开始时使用Eclipse作为开发IDE,结果各种不好使,首先下载和安装SDK,以及不同版本的Imag ...

  5. php class

    一个类可以包含有属于自己的常量,变量(称为"属性")以及函数(称为"方法"). $ 变量--专业术语上称它为"属性".  function ...

  6. 【bzoj1415】 Noi2005—聪聪和可可

    http://www.lydsy.com/JudgeOnline/problem.php?id=1415 (题目链接) 题意 一张图,聪聪想吃可可.每单位时间聪聪可以先移动两次:可可后移动一次或停在原 ...

  7. install scrapy-redis on centos

    wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm -ivh epel-release- ...

  8. NodeJS 爬虫爬取LOL英雄联盟的英雄信息,批量下载英雄壁纸

    工欲善其事,必先利其器,会用各种模块非常重要. 1.模块使用 (1)superagent:Nodejs中的http请求库(每个语言都有无数个,java的okhttp,OC的afnetworking) ...

  9. sql笨办法同步数据

    Helpers.SqlHelper sqlHelper = new Helpers.SqlHelper("server=***;database=Cms;user id=sa;passwor ...

  10. 【原创】JEECMS v6~v7任意文件上传漏洞(1)

    文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...