python Web框架

Django 

安裝:html

pip install Django

目錄添加到系統環境變量中: C:\Python34\Lib\site-packages\django;C:\Python34\Scriptspython

project:web

使用 django-admin 來建立 HelloWorld 項目:數據庫

django-admin startproject HelloWorld

建立完成後咱們能夠查看下項目的目錄結構:django

HelloWorld/        #容器文件夾,由django建立的
|-- HelloWorld     #主文件夾,由django建立的
|   |-- __init__.py
|   |-- settings.py    #該Django項目的設置/配置。
|   |-- urls.py    #路由
|   `-- wsgi.py
`-- manage.py    #一個實用的命令行工具,可以讓你以各類方式與該 Django 項目進行交互。 ———命令行使用

運行:app

python manage.py runserver 0.0.0.0:8000

——能夠邊運行,邊修改框架

HelloWorld/HelloWorld/urls.py 函數

from django.urls import path
from django.conf.urls import url
from . import view,testdb,search,search2
 
urlpatterns = [     #path() url() 均可以,不一樣的路由規則
    path('view', view.rer),              #顯示html

    url(r'^testdb$', testdb.testdb),     #數據庫操做
    path('dbGet', testdb.dbGet),
    path('dbUpdate', testdb.dbUpdate),
    path('dbDel', testdb.dbDel),

    url(r'^search-form$', search.search_form),   #表單
    url(r'^search$', search.search),
    url(r'^search-post$', search2.search_post),
]

HelloWorld/HelloWorld/view.py工具

from django.http import HttpResponse
from django.shortcuts import render
 
def hello(request):
    return HttpResponse("Hello world ! ")

 
def rer(request):
    context          = {}
    context['hello'] = 'rer'
    return render(request, 'hello.html', context) #渲染模板

HelloWorld/templates/hello.htmlpost

<h1>{{ hello }}</h1>

HelloWorld/HelloWorld/settings.py 

INSTALLED_APPS = [
    'TestModel',                            # 添加app
    ...
'DIRS': ["HelloWorld"+"/templates",],       # 修改模板文件夾
    ...
DATABASES = {                               #數據庫配置
    'default': {

app:

一個project能夠包含多個app,一個app實現某個功能

HelloWorld> django-admin startapp TestModel
HelloWorld #容器文件夾

Your apps can live anywhere on your Python path. Generally, we’ll create our poll app right next to your manage.py file so that it can be imported as its own top-level module, rather than a submodule of mysite.

目錄結構以下:

HelloWorld     #容器文件夾,由django建立的
|-- TestModel  #app1文件夾
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- tests.py
|   `-- views.py
|-- HelloWorld #主文件夾
|   `-- ...  
`-- manage.py    # ———命令行使用

一個app能夠有本身的views.py和urls.py

但必須在主文件夾的urls.py裏面

urlpatterns = [ 
    path('***', include('app1.urls')),

建立一個名爲TestModel處理數據庫的app

TestModel/models.py

from django.db import models
 
class Test(models.Model):
    name = models.CharField(max_length=20)

在命令行中運行:

$ python manage.py migrate   # 建立表結構

$ python manage.py makemigrations TestModel  # 讓 Django 知道咱們在咱們的模型有一些變動
$ python manage.py migrate TestModel   # 建立表結構

看到幾行 "Creating table…" 的字樣,你的數據表就建立好了。

在 HelloWorld 目錄中添加 testdb.py 文件 #主文件夾中

HelloWorld/HelloWorld/testdb.py

from django.http import HttpResponse
from TestModel.models import Test
 
# 數據庫操做
def testdb(request):
    test1 = Test(name='runoob')
    test1.save()
    return HttpResponse("<p>數據添加成功!</p>")

# 數據庫操做
def dbGet(request):
    # 初始化
    response = ""
    response1 = ""
    
    
    # 經過objects這個模型管理器的all()得到全部數據行,至關於SQL中的SELECT * FROM
    list = Test.objects.all()
        
    # filter至關於SQL中的WHERE,可設置條件過濾結果
    response2 = Test.objects.filter(id=1) 
    
    # 獲取單個對象
    response3 = Test.objects.get(id=1) 
    
    # 限制返回的數據 至關於 SQL 中的 OFFSET 0 LIMIT 2;
    Test.objects.order_by('name')[0:2]
    
    #數據排序
    Test.objects.order_by("id")
    
    # 上面的方法能夠連鎖使用
    Test.objects.filter(name="runoob").order_by("id")
    
    # 輸出全部數據
    for var in list:
        response1 += var.name + " "
    response = response1
    return HttpResponse("<p>" + response + "</p>")

def dbUpdate(request):
    # 修改其中一個id=1的name字段,再save,至關於SQL中的UPDATE
    test1 = Test.objects.get(id=1)
    test1.name = 'Google'
    test1.save()
    
    # 另一種方式
    #Test.objects.filter(id=1).update(name='Google')
    
    # 修改全部的列
    # Test.objects.all().update(name='Google')
    
    return HttpResponse("<p>修改爲功</p>")

def dbDel(request):
    # 刪除id=1的數據
    test1 = Test.objects.get(id=1)
    test1.delete()
    
    # 另一種方式
    # Test.objects.filter(id=1).delete()
    
    # 刪除全部數據
    # Test.objects.all().delete()
    
    return HttpResponse("<p>刪除成功</p>")

表單操做

/HelloWorld/HelloWorld/search.py

from django.http import HttpResponse
from django.shortcuts import render
 
# 表單
def search_form(request):
    return render(request,'search_form.html')
 
# 接收請求數據
def search(request):  
    request.encoding='utf-8'
    if 'q' in request.GET and request.GET['q']:
        message = '你搜索的內容爲: ' + request.GET['q']
    else:
        message = '你提交了空表單'
    return HttpResponse(message)

/HelloWorld/HelloWorld/search2.py

from django.shortcuts import render
from django.views.decorators import csrf
 
# 接收POST請求數據
def search_post(request):
    ctx ={}
    if request.POST:
        ctx['rlt'] = request.POST['q']
    return render(request, "post.html", ctx)

在模板目錄 templates 中添加 .html

/HelloWorld/templates/search_form.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head>
<body>
    <form action="/search" method="get">
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>
</body>
</html>

/HelloWorld/templates/post.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head>
<body>
    <form action="/search-post" method="post">
        {% csrf_token %}
        <input type="text" name="q">
        <input type="submit" value="Submit">
    </form>
    <p>{{ rlt }}</p>
</body>
</html>

 

Django只能按django建立的project或app填入

快雲精簡lamp就是django外面套層wsgi

    gunicorn是一個unix上被普遍使用的高性能的Python WSGI UNIX HTTP Server。

------------------------------------------------------------------------------

web.py 小型快捷

    pip install web.py==0.40

import web #框架導入

import blog #嵌套的server_app
'''
class blog:
    def GET(self, path):
        return "blog " + path

app_blog = web.application(urls, locals())
'''

class index:
    def GET(self, path):
        return "hello " + path

render = web.template.render('templates/', cache=False)
class index2:
    def GET(self, code):
        web.header('Content-Type', 'text/xml')
        var=code
        return render.response(var)

class RequestHandler(object):	#read raw data from post
    def POST(self):			
        data = web.data() # you can get a lot of data by the POST method

urls = (
    "/(.*)", "index"
    "/blog", blog.app_blog, #嵌套
    "/index2", "index2"
    "/post","RequestHandler"
)

#///Python 內置函數
#globals() 函數會以字典類型返回當前位置的全局變量。
#locals()  局部變量。
app = web.application(urls, globals())
app.run()
相關文章
相關標籤/搜索