Django

Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。

基本配置

一、创建django程序

  • 终端命令:django-admin startproject sitename
  • IDE创建Django程序时,本质上都是自动执行上述命令
其他常用命令:

python manage.py runserver 0.0.0.0

  

python manage.py startapp appname

  

python manage.py syncdb

python manage.py makemigrations

  

python manage.py migrate

python manage.py createsuperuser

二、程序目录

三、配置文件

1、数据库

  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME':'dbname',
  5. 'USER': 'root',
  6. 'PASSWORD': 'xxx',
  7. 'HOST': '',
  8. 'PORT': '',
  9. }
  10. }
  11. # 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替
  12. # 如下设置放置的与project同名的配置的 __init__.py文件中
  13. import pymysql
  14. pymysql.install_as_MySQLdb()

2、模版

  1. TEMPLATE_DIRS = (
  2. os.path.join(BASE_DIR,'templates'),
  3. )

3、静态文件

  1. STATICFILES_DIRS = (
  2. os.path.join(BASE_DIR,'static'),
  3. )

路由系统

1、单一路由对应

  1. url(r'^index$', views.index),

2、基于正则的路由

  1. url(r'^index/(\d*)', views.index),
  2. url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),

3、添加额外的参数

  1. url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}),

4、为路由映射设置名称

  1. url(r'^home', views.home, name='h1'),
  2. url(r'^index/(\d*)', views.index, name='h2'),

设置名称之后,可以在不同的地方调用,如:

  • 模板中使用生成URL {% url 'h2' 2012 %}
  • 函数中使用生成URL reverse('h2', args=(2012,)) 路径:django.urls.reverse
  • Model中使用获取URL 自定义get_absolute_url() 方法
获取请求匹配成功的URL信息:request.resolver_match

5、根据app对路由规则进行分类

  1. url(r'^web/',include('web.urls')),

6、命名空间

a. project.urls.py

  1. from django.conf.urls import url,include
  2. urlpatterns = [
  3. url(r'^a/', include('app01.urls', namespace='author-polls')),
  4. url(r'^b/', include('app01.urls', namespace='publisher-polls')),
  5. ]

b. app01.urls.py

  1. from django.conf.urls import url
  2. from app01 import views
  3. app_name = 'app01'
  4. urlpatterns = [
  5. url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
  6. ]

c. app01.views.py

  1. def detail(request, pk):
  2. print(request.resolver_match)
  3. return HttpResponse(pk)

以上定义带命名空间的url之后,使用name生成URL时候,应该如下:

  • v = reverse('app01:detail', kwargs={'pk':11})
  • {% url 'app01:detail' pk=12 pp=99 %}

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

模板

1、模版的执行

模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

  1. def current_datetime(request):
  2. now = datetime.datetime.now()
  3. html = "<html><body>It is now %s.</body></html>" % now
  4. return HttpResponse(html)
  1. from django import template
  2. t = template.Template('My name is {{ name }}.')
  3. c = template.Context({'name': 'Adrian'})
  4. print t.render(c)
  1. import datetime
  2. from django import template
  3. import DjangoDemo.settings
  4. now = datetime.datetime.now()
  5. fp = open(settings.BASE_DIR+'/templates/Home/Index.html')
  6. t = template.Template(fp.read())
  7. fp.close()
  8. html = t.render(template.Context({'current_date': now}))
  9. return HttpResponse(html)
  1. from django.template.loader import get_template
  2. from django.template import Context
  3. from django.http import HttpResponse
  4. import datetime
  5. def current_datetime(request):
  6. now = datetime.datetime.now()
  7. t = get_template('current_datetime.html')
  8. html = t.render(Context({'current_date': now}))
  9. return HttpResponse(html)
  1. return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))

2、模版语言

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

  1. {{ item }}
  2. {% for item in item_list %} <a>{{ item }}</a> {% endfor %}
  3.   forloop.counter
  4.   forloop.first
  5.   forloop.last
  6.   
  7. {% if ordered_warranty %} {% else %} {% endif %}
  8. 母板:{% block title %}{% endblock %}
  9. 子板:{% extends "base.html" %}
  10.    {% block title %}{% endblock %}
  11.    
  12. 帮助方法:
  13. {{ item.event_start|date:"Y-m-d H:i:s"}}
  14. {{ bio|truncatewords:"30" }}
  15. {{ my_list|first|upper }}
  16. {{ name|lower }}

3、自定义simple_tag

a、在app中创建templatetags模块

b、创建任意 .py 文件,如:xx.py

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. from django import template
  4. from django.utils.safestring import mark_safe
  5. register = template.Library()
  6. @register.simple_tag
  7. def my_simple_time(v1,v2,v3):
  8. return v1 + v2 + v3
  9. @register.simple_tag
  10. def my_input(id,arg):
  11. result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
  12. return mark_safe(result)

c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名

  1. {% load xx %}

d、使用simple_tag

  1. {% my_simple_time 1 2 3%}
  2. {% my_input 'id_username' 'hide'%}

e、在settings中配置当前app,不然django无法找到自定义的simple_tag 

  1. INSTALLED_APPS = (
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'app01',
  9. )

Form

django中的Form一般有两种功能:

  • 输入html
  • 验证用户输入
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import re
  4. from django import forms
  5. from django.core.exceptions import ValidationError
  6. def mobile_validate(value):
  7. mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
  8. if not mobile_re.match(value):
  9. raise ValidationError('手机号码格式错误')
  10. class PublishForm(forms.Form):
  11. user_type_choice = (
  12. (0, u'普通用户'),
  13. (1, u'高级用户'),
  14. )
  15. user_type = forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice,
  16. attrs={'class': "form-control"}))
  17. title = forms.CharField(max_length=20,
  18. min_length=5,
  19. error_messages={'required': u'标题不能为空',
  20. 'min_length': u'标题最少为5个字符',
  21. 'max_length': u'标题最多为20个字符'},
  22. widget=forms.TextInput(attrs={'class': "form-control",
  23. 'placeholder': u'标题5-20个字符'}))
  24. memo = forms.CharField(required=False,
  25. max_length=256,
  26. widget=forms.widgets.Textarea(attrs={'class': "form-control no-radius", 'placeholder': u'详细描述', 'rows': 3}))
  27. phone = forms.CharField(validators=[mobile_validate, ],
  28. error_messages={'required': u'手机不能为空'},
  29. widget=forms.TextInput(attrs={'class': "form-control",
  30. 'placeholder': u'手机号码'}))
  31. email = forms.EmailField(required=False,
  32. error_messages={'required': u'邮箱不能为空','invalid': u'邮箱格式错误'},
  33. widget=forms.TextInput(attrs={'class': "form-control", 'placeholder': u'邮箱'}))
  34. def __init__(self, *args, **kwargs):
  35. super(SampleImportForm, self).__init__(*args, **kwargs)
  36. self.fields['idc'].widget.choices = models.IDC.objects.all().order_by('id').values_list('id','display')
  37. self.fields['business_unit'].widget.choices = models.BusinessUnit.objects.all().order_by('id').values_list('id','name')
  1. def publish(request):
  2. ret = {'status': False, 'data': '', 'error': '', 'summary': ''}
  3. if request.method == 'POST':
  4. request_form = PublishForm(request.POST)
  5. if request_form.is_valid():
  6. request_dict = request_form.clean()
  7. print request_dict
  8. ret['status'] = True
  9. else:
  10. error_msg = request_form.errors.as_json()
  11. ret['error'] = json.loads(error_msg)
  12. return HttpResponse(json.dumps(ret))

扩展:ModelForm

在使用Model和Form时,都需要对字段进行定义并指定类型,通过ModelForm则可以省去From中字段的定义

  1. class AdminModelForm(forms.ModelForm):
  2. class Meta:
  3. model = models.Admin
  4. #fields = '__all__'
  5. fields = ('username', 'email')
  6. widgets = {
  7. 'email' : forms.PasswordInput(attrs={'class':"alex"}),
  8. }

Model

到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:

  • 创建数据库,设计表结构和字段
  • 使用 MySQLdb 来连接数据库,并编写数据访问层代码
  • 业务逻辑层去调用数据访问层执行数据库操作
  1. import MySQLdb
  2. def GetList(sql):
  3. db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')
  4. cursor = db.cursor()
  5. cursor.execute(sql)
  6. data = cursor.fetchall()
  7. db.close()
  8. return data
  9. def GetSingle(sql):
  10. db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')
  11. cursor = db.cursor()
  12. cursor.execute(sql)
  13. data = cursor.fetchone()
  14. db.close()
  15. return data

django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM)。

  • PHP:activerecord
  • Java:Hibernate
  • C#:Entity Framework

django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表。

1、创建Model,之后可以根据Model来创建数据库表

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

更多字段

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

参数

  1. null -> db是否可以为空
  2. default -> 默认值
  3. primary_key -> 主键
  4. db_column -> 列名
  5. db_index -> 索引
  6. unique -> 唯一索引
  7. unique_for_date
  8. unique_for_month
  9. unique_for_year
  10. auto_now -> 创建时,自动生成时间
  11. auto_now_add ->更新时,自动更新为当前时间
  12. # obj=UserGroup.objects.filter(id=1).update(caption='CEO')
  13. # obj=UserGroup.objects.filter(id=1).first()
  14. # obj.caption = "CEO"
  15. # obj.save()
  16. choices ->django admin中显示下拉框,避免连表查询
  17. blank -> django admin是否可以为空
  18. verbose_name -> django admin显示字段中文
  19. editable -> django admin是否可以被编辑
  20. error_messages -> 错误信息欠
  21. help_text -> django admin提示
  22. validators -> django form ,自定义错误信息

元信息

  1. class UserInfo(models.Model):
  2. user = models.CharField(max_length=12)
  3. ctime = models.DateTimeField(auto_now_add=True)
  4. uptime = models.DateTimeField(auto_now=True)
  5. class Meta:
  6. # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
  7. db_table = "table_name"
  8. # 联合索引
  9. index_together = [
  10. ["pub_date", "deadline"],
  11. ]
  12. # 联合唯一索引
  13. unique_together = (("driver", "restaurant"),)

2、连表关系:

  • 一对多,models.ForeignKey(ColorDic)
  • 一对一,models.OneToOneField(OneModel)
  • 多对多,authors = models.ManyToManyField(Author)

应用场景:

  • 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了)。

    例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据。
  • 一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)。

    例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。
  • 多对多:在某表中创建一行数据是,有一个可以多选的下拉框。

    例如:创建用户信息,需要为用户指定多个爱好。

3、数据库操作

  • 增加:创建实例,并调用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
  1. cursor = connection.cursor()
  2. cursor.execute('''SELECT DISTINCT first_name ROM people_person WHERE last_name = %s""", ['Lennon'])
  3. row = cursor.fetchone()

From

  1. class FileForm(forms.Form):
  2. ExcelFile = forms.FileField()

Model

  1. from django.db import models
  2. class UploadFile(models.Model):
  3. userid = models.CharField(max_length = 30)
  4. file = models.FileField(upload_to = './upload/')
  5. date = models.DateTimeField(auto_now_add=True)

View

  1. def UploadFile(request):
  2. uf = AssetForm.FileForm(request.POST,request.FILES)
  3. if uf.is_valid():
  4. upload = models.UploadFile()
  5. upload.userid = 1
  6. upload.file = uf.cleaned_data['ExcelFile']
  7. upload.save()
  8. print upload.file

中间件

django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件,如下图。

与mange.py在同一目录下的文件夹 wupeiqi/middleware下的auth.py文件中的Authentication类

中间件中可以定义四个方法,分别是:

  • process_request(self,request)
  • process_view(self, request, callback, callback_args, callback_kwargs)
  • process_template_response(self,request,response)
  • process_exception(self, request, exception)
  • process_response(self, request, response)

以上方法的返回值可以是None和HttpResonse对象,如果是None,则继续按照django定义的规则向下执行,如果是HttpResonse对象,则直接将该对象返回给用户。

自定义中间件

1、创建中间件类

  1. class RequestExeute(object):
  2. def process_request(self,request):
  3. pass
  4. def process_view(self, request, callback, callback_args, callback_kwargs):
  5. i =1
  6. pass
  7. def process_exception(self, request, exception):
  8. pass
  9. def process_response(self, request, response):
  10. return response

2、注册中间件

  1. MIDDLEWARE_CLASSES = (
  2. 'django.contrib.sessions.middleware.SessionMiddleware',
  3. 'django.middleware.common.CommonMiddleware',
  4. 'django.middleware.csrf.CsrfViewMiddleware',
  5. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  6. 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  7. 'django.contrib.messages.middleware.MessageMiddleware',
  8. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  9. 'wupeiqi.middleware.auth.RequestExeute',
  10. )

admin

django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查,而使用django admin 则需要以下步骤:

  • 创建后台管理员
  • 配置url
  • 注册和配置django admin后台管理页面

1、创建后台管理员

  1. python manage.py createsuperuser

2、配置后台管理url

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

3、注册和配置django admin 后台管理页面

a、在admin中执行如下配置

  1. from django.contrib import admin
  2. from app01 import models
  3. admin.site.register(models.UserType)
  4. admin.site.register(models.UserInfo)
  5. admin.site.register(models.UserGroup)
  6. admin.site.register(models.Asset)

b、设置数据表名称

  1. class UserType(models.Model):
  2. name = models.CharField(max_length=50)
  3. class Meta:
  4. verbose_name = '用户类型'
  5. verbose_name_plural = '用户类型'

c、打开表之后,设定默认显示,需要在model中作如下配置

  1. class UserType(models.Model):
  2. name = models.CharField(max_length=50)
  3. def __unicode__(self):
  4. return self.name
  1. from django.contrib import admin
  2. from app01 import models
  3. class UserInfoAdmin(admin.ModelAdmin):
  4. list_display = ('username', 'password', 'email')
  5. admin.site.register(models.UserType)
  6. admin.site.register(models.UserInfo,UserInfoAdmin)
  7. admin.site.register(models.UserGroup)
  8. admin.site.register(models.Asset)

d、为数据表添加搜索功能

  1. from django.contrib import admin
  2. from app01 import models
  3. class UserInfoAdmin(admin.ModelAdmin):
  4. list_display = ('username', 'password', 'email')
  5. search_fields = ('username', 'email')
  6. admin.site.register(models.UserType)
  7. admin.site.register(models.UserInfo,UserInfoAdmin)
  8. admin.site.register(models.UserGroup)
  9. admin.site.register(models.Asset)

e、添加快速过滤

  1. from django.contrib import admin
  2. from app01 import models
  3. class UserInfoAdmin(admin.ModelAdmin):
  4. list_display = ('username', 'password', 'email')
  5. search_fields = ('username', 'email')
  6. list_filter = ('username', 'email')
  7. admin.site.register(models.UserType)
  8. admin.site.register(models.UserInfo,UserInfoAdmin)
  9. admin.site.register(models.UserGroup)
  10. admin.site.register(models.Asset)

Python Day19的更多相关文章

  1. Python day19 模块介绍3(sys,json,pickle,shelve,xml)

    1.sys模块 import sys sys.path()#打印系统path sys.version()#解释程序版本信息 sys.platform()#系统平台 sys.exit(0)#退出程序 c ...

  2. python day19 : 购物商城作业,进程与多线程

    目录 python day 19 1. 购物商城作业要求 2. 多进程 2.1 简述多进程 2.2 multiprocessing模块,创建多进程程序 2.3 if name=='main'的说明 2 ...

  3. python之路——19

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 复习 1.正则表达式 1.字符组 2.元字符 \w \d \s 匹配任意字母数字下划线 数字 空格 \W \ ...

  4. Python——collections模块、time模块、random模块、os模块、sys模块

    1. collections模块 (1)namedtuple # (1)点的坐标 from collections import namedtuple Point = namedtuple('poin ...

  5. 20 Python 常用模块

    collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...

  6. Python学习路程day19

    Python之路,Day19 - Django 进阶   本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...

  7. Python之路,Day19 - CMDB、CMDB、CMDB

    Python之路,Day19 - CMDB.CMDB.CMDB   本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT ...

  8. python学习 day19 configparser模块 os模块 subprocess模块

    上周五回顾 logging 用于记录日志 四种核心角色: 生成器Logger 过滤器Filter 处理器Handler 格式化处理器 Formatter logging.info.debug 使用默认 ...

  9. day19 python模块 json模块 pickle模块

    day19 python   一.序列化模块     序列类型: 列表 字符串 元组 bytes     序列化: 特指字符串和bytes, 就是把其他的数据类型转化成序列的数据类型的过程 dic = ...

随机推荐

  1. SSH面试题(struts2+Spring+hibernate)

    struts2 + Spring +hibernate Hibernate工作原理及为什么要用?   原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory ...

  2. 开启基本数据结构和算法之路--初识Graphviz

    在我的Linux刀耕开荒阶段,就想开始重拾C,利用C实现常用的基本数据结构和算法,而数据结构和算法的掌握的熟练程度正是程序的初学者与职业程序员的分水岭. 那么怎么开启这一段历程呢? 按照软件工程的思想 ...

  3. SQL Server 2014 Database Mail重复发送邮件特殊案例

    在一数据库服务器(Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64))发现有个作业调用Database Mail发送邮件时, ...

  4. 多值(in),范围值(between..and)

    多值检测 关键词[in]   查出年龄是23,24,28 的人员信息 select * from T_Employee  where FAge  in (23,25,28) in 后面如果跟子查询, ...

  5. webform(八)——LinQ简单增、删、改、查

    一.简单介绍 1.LinQ to Sql类(NET Language Integrated Query (LINQ) ) LINQ定义了大约40个查询操作符,如select.from.in.where ...

  6. Oracle常用命令大全(很有用,做笔记)

    一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...

  7. oracle 自增长序列

    create or replace TRIGGER "METTINGUSER".TRG_PREPN BEFORE INSERT ON "PREPROJFUN" ...

  8. 第9章 Shell基础(1)_Shell简介和脚本执行方式

    1. Shell概述 1.1 Shell简介 (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编 ...

  9. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  10. ngx_http_upstream_module模块.md

    ngx_http_upstream_module ngx_http_upstream_module模块用于定义可由proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pas ...