# 在下载好的django路径下执行django的安装 # https://pypi.python.org/pypi/Django/1.6.4 python3 setup.py install # # 新建django项目 django-admin.py startproject mysite # # 运行django项目 python3 manage.py runserver [port] # # 创建一个app python3 manage.py startapp appname # # 模型定义特殊字段定义(后面一些Field被略去) # AutoFiled SlugField SmallIntegerField #Date,DateTime,Decimal,Char,File,Float,FilePath,Text#,Time,Binary,Boolean,BigInterger,NullBoolean,Image,#Interger,OneToOne #PositiveSmallIntegerField, #PositiveIntergerField,Url,Email # # 创建一个model实体 from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) // 普通字段 website = models.URLField() // url类型字段 email = models.EmailField() // email类型字段 publication_date = models.DateField() // 时间类型字段 publisher = models.ForeignKey(Publisher) // 引用信息(外键) # # 模型检测 (需要在settings.py中注册此app) python3 manage.py validate # # 模型生成sql语句查看 python3 manage.py sqlall modelname (app的名字) # # 模型生成到db 要生成用户之前必须做这一步 python3 manage.py syncdb # # 建立管理超级员 python manage.py createsuperuser # # 将model加入到admin管理列表中 在admin中 from django.contrib import admin from books.models import Publisher, Author, Book admin.site.register(Author,AuthorAdmin) # # 附加管理视图 from django.contrib import admin class BookAdmin(admin.ModelAdmin): list_display = (‘title‘, ‘publisher‘, ‘publication_date‘) #显示列 list_filter = (‘publication_date‘,) # 列过滤条件 date_hierarchy = ‘publication_date‘ # 日期选择条件 ordering = (‘-publication_date‘,) # 列表日期降序排列 fields = (‘title‘, ‘authors‘, ‘publisher‘) # 编辑时显示需要添加的列 其他列 null=True raw_id_fields = (‘publisher‘,) # 编辑时 显示为id序号 # # 定义模板路径 TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__), ‘template‘).replace(‘\\‘,‘/‘), # /Users/King/Documents/Ops/Python/HelloDjango/HelloDjango # /Users/King/Documents/Ops/Python/HelloDjango/HelloDjango/template ) # # 进入项目命令行模型 python manage.py shell from django.contrib.auth.models import Publisher p = Publisher.objects.create(name=‘Apress‘,website=‘www.apress.com‘) Publisher.name = ‘tuling‘ 所有的model都拥有一个objects管理器 使用filter方法可以过滤obj Publisher.objects.filter(name=‘usa‘) 模糊查询 Publisher.objects.filter(name__contains=‘usa‘) # 使用get方法可完成一个对象的获取,如果返回不止一个对象就会报错 Publisher.DoesNotExist 使用order_by 排序 可 - 倒排 p = Publisher.objects.filter(id=52).update(name=‘Apress Publishing‘) p.delete() 删除对象 p.save() # # 导入静态文件 在setting.py中 # 静态资源区域 # 这是一个根目录区域 对应实际文件目录 STATIC_ROOT = ‘static/‘ # 这是url配置目录 给urls用的 STATIC_URL = ‘static/‘ 在模板页面中 <link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.css"> <script type="text/javascript" src="{{ STATIC_URL }}js/bootstrap.js"></script> 在urls.py的配置中 from django.conf.urls.static import static 在最后加入 admin.autodiscover() urlpatterns = patterns(‘‘, # Examples: # url(r‘^$‘, ‘HelloDjango.views.home‘, name=‘home‘), # url(r‘^blog/‘, include(‘blog.urls‘)), url(r‘^admin/‘, include(admin.site.urls)), (r‘^$‘, latest_books), ) + (static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)) 在views.py对应的输出视图中 return render_to_response(‘index.html‘, { ‘book_list‘: book_list, ‘STATIC_URL‘: STATIC_URL, }) # # 其他解决方案 配置文件中 STATICFILES_DIRS = ( ‘/Users/King/Documents/Ops/Python/HelloDjango/static‘, ) # # # 一个app基本的设置 # # import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) ROOT_URLCONF = ‘HelloDjango.urls‘ SECRET_KEY = ‘&%s+d(0$motnksr+0o+oo8z9k=2h*7gd%gnnylrnc^w5#nut)h‘ DEBUG = True TEMPLATE_DEBUG = True ALLOWED_HOSTS = [] MIDDLEWARE_CLASSES = ( ‘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‘, ) WSGI_APPLICATION = ‘HelloDjango.wsgi.application‘ DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.sqlite3‘, ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘), } } LANGUAGE_CODE = ‘en-us‘ TIME_ZONE = ‘Asia/Shanghai‘ USE_I18N = True USE_L10N = True USE_TZ = True # # Absolute filesystem path to the directory that will hold user-uploaded files. # # Example: "/home/media/media.lawrence.com/media/" # MEDIA_ROOT = ‘‘ # # # URL that handles the media served from MEDIA_ROOT. Make sure to use a # # trailing slash. # # Examples: "http://media.lawrence.com/media/", "http://example.com/media/" # MEDIA_URL = ‘‘ # BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # TEMPLATE_DIRS = (‘templates‘,) # 静态资源区域 # 这是一个根目录区域 对应实际文件目录 STATIC_ROOT = ‘static/‘ # 这是url配置目录 给urls用的 STATIC_URL = ‘static/‘ # STATICFILES_DIRS = ( # # Put strings here, like "/home/html/static" or "C:/www/django/static". # # Always use forward slashes, even on Windows. # # Don‘t forget to use absolute paths, not relative paths. # ) # STATICFILES_FINDERS = ( # ‘django.contrib.staticfiles.finders.FileSystemFinder‘, # ‘django.contrib.staticfiles.finders.AppDirectoriesFinder‘, # # ‘django.contrib.staticfiles.finders.DefaultStorageFinder‘, # ) # 定义模板路径 # List of callables that know how to import templates from various sources. # TEMPLATE_LOADERS = ( # ‘django.template.loaders.filesystem.Loader‘, # ‘django.template.loaders.app_directories.Loader‘, # # ‘django.template.loaders.eggs.Loader‘, # ) TEMPLATE_DIRS = ( os.path.join(BASE_DIR, ‘templates‘).replace(‘\\‘,‘/‘), ) INSTALLED_APPS = ( ‘django.contrib.admin‘, ‘django.contrib.auth‘, ‘django.contrib.contenttypes‘, ‘django.contrib.sessions‘, ‘django.contrib.messages‘, ‘django.contrib.staticfiles‘, ‘app‘, ) # LOGGING = { # ‘version‘: 1, # ‘disable_existing_loggers‘: False, # ‘filters‘: { # ‘require_debug_false‘: { # ‘()‘: ‘django.utils.log.RequireDebugFalse‘ # } # }, # ‘handlers‘: { # ‘mail_admins‘: { # ‘level‘: ‘ERROR‘, # ‘filters‘: [‘require_debug_false‘], # ‘class‘: ‘django.utils.log.AdminEmailHandler‘ # } # }, # ‘loggers‘: { # ‘django.request‘: { # ‘handlers‘: [‘mail_admins‘], # ‘level‘: ‘ERROR‘, # ‘propagate‘: True, # }, # } # }
Django框架中的基本交互
# 服务器端展示数据 from django.shortcuts import render_to_response def search(request): return render_to_response(‘search.html‘, {‘books‘:books,}) # # search.html的数据渲染 , 利用模板 {% if books %} <ul> 发现 {{ books | length }} 本书 {% for book in books %} <li>{{ book.title }}</li> {% endfor %} </ul> {% else %} <p>没有查询到任何图书信息</p> {% endif %}
# 客户端提交数据 search_form.html <html><head> <title>Search</title></head> <body> {% if error %} <p style="color:red;">请输入查询条件</p> {% endif %} <form action="/search_form/" method="get"> <input type="text" name="q"> <input type="submit" value="Search"> </form> </body> </html> # # 收集客户端信息 # from django.http import HttpResponse # request.path() get_host() get_full_path() get_isecure() # request.META[] 包含http头信息 def search_form(request): if ‘q‘ in request.GET and request.GET[‘q‘]: q = request.GET[‘q‘] books = Book.objects.filter(title__icontains=q) return render_to_response(‘search_result.html‘, {‘books‘:books,‘query‘:q}) else: return render_to_response(‘search.html‘, {‘error‘: True})
最后附博文中基本实现代码一份
下一篇计划Django的高级应用
本文出自 “Apprentice” 博客,请务必保留此出处http://apprentice.blog.51cto.com/2214645/1405535