Django操作与内容
生活随笔
收集整理的這篇文章主要介紹了
Django操作与内容
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、路由系統(tǒng)
1.如何實(shí)現(xiàn)偽靜態(tài)
在cnblogs中:https://www.cnblogs.com/wangwei5979/p/11160708.html 而我們自己寫的: http://127.0.0.1:8000/up_studnet/?id=12同樣是網(wǎng)頁 為何cnblogs這樣設(shè)計(jì) 原因: 1就是因?yàn)楸容^美觀 2由于使用搜索引擎來搜索我們所需要的內(nèi)容使,第一種的方式更容易被各個(gè)搜索引擎所收錄,被搜索到的概率就高,我們自己寫的會(huì)被搜索引擎認(rèn)知為動(dòng)態(tài)網(wǎng)頁,而第一個(gè)方式就是偽靜態(tài)。例題: http://127.0.0.1:8000/up_studnet/?id=12http://127.0.0.1:8000/up_studnet/12/ 如何實(shí)現(xiàn):在urls.py里,在url中添加這樣的正則匹配, [url(r'^index/(\w+)/(\w+)/', index), url(r'^test/(?P<id>\w+)/(?P<name>\w+)/', test),]def test(request, name, id): print(id , name)return HttpResponse('test')此時(shí)就不需要用?id=某個(gè)值來進(jìn)行傳值,避免了使用?來操作
2.路由正則與反向路由
在url里 url(r'^test2/', test2) 在html中會(huì)匹配以test2/開頭的所有接下來的網(wǎng)頁可以u(píng)rl(r'^test2/$', test2) 只能匹配/test2/的網(wǎng)頁了還可以自己定義404: url(r'^', notfound) 需要寫到最下面在定義了這個(gè)統(tǒng)配之后,所有在url沒有的 都會(huì)走這個(gè)自定義的404了反向路由: 后臺(tái)url: url(r'^logindjsajdbjsabdsabdbsabdhsabdhbsahbdsaasa/$', login, name='xxx')前臺(tái): <form action="{% url 'xxx' %}"><input type="text"> </form>
3.路由分組
有許多相同的方法可以寫在一個(gè)py文件里,django也有這個(gè)方法,可以通過創(chuàng)建app來完成,在創(chuàng)建django時(shí)只可以帶著創(chuàng)建一個(gè)app文件。 django創(chuàng)建app: python3 manage.py startapp 自定義app名稱路由分組總urls.py; url(r'^app02/', include('app02.urls')), url(r'^app03/', include('app03.urls')),分app下的 urls.py: from app03 import viewsurlpatterns = [url(r'^students/', views.studnets)] 然后在app下的views.py里寫方法
二、函數(shù)視圖
FBV: function based viewCBV: class based viewurls.py: url(r'^login/', views.Login.as_view()),views.py: from django.views import Viewclass Login(View):def get(self, request):return render(request, "login.html")def post(self, request): uname = request.POST.get('username')print(uname) return HttpResponse('ok')原理: 'get': 請(qǐng)求數(shù)據(jù) 'post':提交數(shù)據(jù) 'delete': 刪除數(shù)據(jù) 'put': 更新數(shù)據(jù) 'patch': 更新部分?jǐn)?shù)據(jù)ps: form表單提交 只支持get、post ajax支持核心:def dispatch(self, request, *args, **kwargs):super(Login, self).dispatch(request, *args, **kwargs) 可以創(chuàng)建dispatch方法來做數(shù)據(jù)的限制
三、Django的ORM
Django的ORM,跟sqlalchemy一樣都是操作mysql數(shù)據(jù)庫(kù)的。 在Django的ORM中, orm配置: a.創(chuàng)建數(shù)據(jù)庫(kù) create database 數(shù)據(jù)庫(kù)名b.配置mysql數(shù)據(jù)庫(kù)的鏈接: DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),# }'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'xxx', ## 數(shù)據(jù)庫(kù)名稱'USER': 'xxx',## 數(shù)據(jù)庫(kù)用戶名稱'PASSWORD': 'xxx', ## 安裝 mysql 數(shù)據(jù)庫(kù)時(shí),輸入的xxx 用戶的密碼'HOST': '127.0.0.1',}}c. 注冊(cè)app: INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app02','app03'] d. 需要將mysqldb換成pymysql python3:pymysqlpython2:MySQLdb在總的的 __init__.py文件里 import pymysql pymysql.install_as_MySQLdb()e:創(chuàng)建表 命令:在app文件的models里,可以創(chuàng)建如下表: class Classes(models.Model):cid=models.AutoField(primary_key=True)cname = models.CharField(max_length=32, null=True)然后再Terminal里python manage.py makemigrationspython manage.py migrate
?
轉(zhuǎn)載于:https://www.cnblogs.com/wangwei5979/p/11191503.html
總結(jié)
以上是生活随笔為你收集整理的Django操作与内容的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 异步导致UI句柄增加的解决办法
- 下一篇: Emacs中的Color Theme以及