㈠ 如何在社區版pycharm中安裝django
django是python的一個開源web框架,在pycharm開發環境中,pycharm專業版在新建一個項目的時候有django選項,幫助創建一個django框架的項目。pycharm社區版需要自己創建
第一步:安裝django框架
可以用pycharm安裝,打開file \ setings \ project \ project interpreter 查看項目已安裝的包,單擊綠色加號添加目標框架,
注意記錄django的安裝路徑,我的安裝路徑是: c:\users\用戶名\appdata\roaming\python\python36\site-packages\
第二步:為了能讓Windows找到django-admin的路徑,需要設置環境變數,
path,是告訴系統,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到哪些目錄下去尋找,
打開我的電腦 \ 屬性\ 高級系統設置 \ 環境變數 \ 找到path變數,把剛才記錄的django的安裝路徑添加到path變數中。其中path變數中有的已經存有Python的目錄,當path需要多個值的時候,兩個路徑之間用分號 「;」隔開
第三步:打開Windows命令行,用django-admin.py 創建項目,注意創建項目的路徑 c:\users\fyc
打開目錄位置,找到創建的項目,看到裡面有一些文件
第四步:用pycharm打開上一步所創建的項目,由於pycharm默認的項目目錄是 pycharmprojects,所以把剛才創建的項目拷貝到默認目錄(也可以不拷貝,只是為了方便管理)
拷貝完項目之後打開pycharm ,文件,新建工程,選擇文件位置,把文件目錄選在在pycharmproject 下,剛才創建的目錄下
打開項目,會出現提示
我們是想從一個已存在的資源創建項目,所以選是,完成創建
㈡ pycharm怎麼配置django環境
1創建一大緩個django項目
2運行這個django環境,這時PyCharm會報錯,提逗春示缺少子命令
3配置PyCharm:添滾指模加 runserver 到配置中。 即可。
4再運行PyCharm上的django項目:則說明配置成功。
㈢ 如何解決Django 1.8在migrate時失敗
1. 創建項目 運行下面命令就可以創慶培改建一個 django 項目,項目譽判名稱叫 mysite : $ django-admin.py startproject mysite 創中頌建後的項目目錄如下: mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py 1 dir...
㈣ pycharm中新建django怎麼新加application
打開PyCharm官網http://www.jetbrains.com/pycharm/,選擇搜碧Download,進入下載頁面。
這時會出現2個版本,左邊的那個是購買版,可以試用30天;右邊那個是社區版,免費的,我們一般選擇右邊社區版。
下載完後進行安裝,一直選擇下一步就可以了,我就不詳細介紹了。安裝完後運行PyCharm,新建項目。此時建的項目並不是Django項目,這個還需要我們自己設置。
安裝Django,使用命令安裝,我這里是用的cmder,非常好用的控制台命令窗口,替鏈知代了cmd。進入到Python27的目錄下,使用命令 pip install Django== 1.8.3 ,執行完就OK了。
新建Django項目,我這里是使用命令創建項目的。
django-admin startproject HelloDjango 創建HelloDjango項目
然後進入到HelloDjango項目根目錄下,運行命令創建hello模塊
python manage.py startapp hello
此時PyCharm中就有一個HelloDjango項目了。
現在我們來搭建一個簡單的web服務。
修改views.py文件
修改urls.py文件
兩個文件修改完後,就可以啟動項目了,執行命令
python manage.py migrate
python manage.py runserver
此時項目已經啟動起來世喚舉了,它會告訴我們訪問地址,按照地址進行訪問就OK了。
㈤ 如何在django上自動創建createuperuser
1. 創建項目
運缺州行面命令創建 django 項目項目名稱叫 mysite :
$ django-admin.py startproject mysite
創建項目目錄:
mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 5 files
說明:
__init__.py :讓 Python 該目錄發包 (即組模塊)所需文件 空文件般需要修改
manage.py :種命令行工具允許種式與局扮唯該 Django 項目進行交互 鍵入python manage.py help看能做 應需要編輯文件;目錄純便
settings.py :該 Django 項目設置或配置
urls.py:Django項目URL路由設置目前空
wsgi.py:WSGI web 應用伺服器配置文件更細節查看 How to deploy with WSGI
接修改 settings.py 文件例:修改 LANGUAGE_CODE、設置區 TIME_ZONE
SITE_ID = 1
LANGUAGE_CODE = 'zh_CN'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = True
面啟 [Time zone]() 特性需要安裝 pytz:
$ sudo pip install pytz
2. 運行項目
運行項目前我需要創建資料庫表結構我使用默認資料庫:
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying sessions.0001_initial... OK
啟服務:
$ python manage.py runserver
看面輸:
Performing system checks...
System check identified no issues (0 silenced).
January 28, 2015 - 02:08:33
Django version 1.7.1, using settings 'mysite.settings'
Starting development server at
Quit the server with CONTROL-C.
埠8000啟本伺服器, 並且能台電腦連接訪問 既伺服器已經運行起現用網頁瀏覽器訪問 應該看令賞悅目淡藍色 Django 歡迎頁面始工作
指定啟埠:
$ python manage.py runserver 8080
及指定 ip:
$ python manage.py runserver 0.0.0.0:8000
3. 創建 app
前面創建項目並且功運行現創建 app app 相於項目模塊
項目目錄創建桐培 app:
$ python manage.py startapp polls
操作功 mysite 文件夾看已經叫 polls 文件夾目錄結構:
polls
├── __init__.py
├── admin.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
1 directory, 6 files
4. 創建模型
每 Django Model 都繼承自 django.db.models.Model
Model 每屬性 attribute 都代表 database field
通 Django Model API 執行資料庫增刪改查, 需要寫些資料庫查詢語句
打 polls 文件夾 models.py 文件創建兩模型:
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
mysite/settings.py 修改 INSTALLED_APPS 添加 polls:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
)
添加新 app 我需要運行面命令告訴 Django 模型做改變需要遷移資料庫:
$ python manage.py makemigrations polls
看面輸志:
Migrations for 'polls':
0001_initial.py:
- Create model Choice
- Create model Question
- Add field question to choice
polls/migrations/0001_initial.py 查看遷移語句
運行面語句查看遷移 sql 語句:
$ python manage.py sqlmigrate polls 0001
輸結:
BEGIN;
CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL);
CREATE TABLE "polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);
CREATE TABLE "polls_choice__new" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL REFERENCES "polls_question" ("id"));
INSERT INTO "polls_choice__new" ("choice_text", "votes", "id") SELECT "choice_text", "votes", "id" FROM "polls_choice";
DROP TABLE "polls_choice";
ALTER TABLE "polls_choice__new" RENAME TO "polls_choice";
CREATE INDEX polls_choice_7aa0f6ee ON "polls_choice" ("question_id");
COMMIT;
運行面命令檢查資料庫否問題:
$ python manage.py check
再運行面命令創建新添加模型:
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, contenttypes, polls, auth, sessions
Running migrations:
Applying polls.0001_initial... OK
總結修改模型需要做幾步驟:
修改 models.py 文件
運行 python manage.py makemigrations 創建遷移語句
運行 python manage.py migrate模型改變遷移資料庫
閱讀 django-admin.py documentation查看更 manage.py 用
創建模型我通 Django 提供 API 做測試運行面命令進入 python shell 交互模式:
$ python manage.py shell
面些測試:
>>> from polls.models import Question, Choice # Import the model classes we just wrote.
# No questions are in the system yet.
>>> Question.objects.all()
[]
# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
# Save the object into the database. You have to call save() explicitly.
>>> q.save()
# Now it has an ID. Note that this might say "1L" instead of "1", depending
# on which database you're using. That's no biggie; it just means your
# database backend prefers to return integers as Python long integer
# objects.
>>> q.id
1
# Access model field values via Python attributes.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=)
# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"
>>> q.save()
# objects.all() displays all the questions in the database.
>>> Question.objects.all()
[]
列印所 Question 輸結 []我修改模型類使其輸更易懂描述修改模型類:
from django.db import models
class Question(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.question_text
class Choice(models.Model):
# ...
def __str__(self): # __unicode__ on Python 2
return self.choice_text
接繼續測試:
>>> from polls.models import Question, Choice
# Make sure our __str__() addition worked.
>>> Question.objects.all()
[]
# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
>>> Question.objects.filter(id=1)
[]
>>> Question.objects.filter(question_text__startswith='What')
[]
# Get the question that was published this year.
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
# Request an ID that doesn't exist, this will raise an exception.
>>> Question.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist.
# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to Question.objects.get(id=1).
>>> Question.objects.get(pk=1)
# Make sure our custom method worked.
>>> q = Question.objects.get(pk=1)
# Give the Question a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a question's choice) which can be accessed via the API.
>>> q = Question.objects.get(pk=1)
# Display any choices from the related object set -- none so far.
>>> q.choice_set.all()
[]
# Create three choices.
>>> q.choice_set.create(choice_text='Not much', votes=0)
>>> q.choice_set.create(choice_text='The sky', votes=0)
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)
# Choice objects have API access to their related Question objects.
>>> c.question
# And vice versa: Question objects get access to Choice objects.
>>> q.choice_set.all()
[, , ]
>>> q.choice_set.count()
3
# The API automatically follows relationships as far as you need.
# Use double underscores to separate relationships.
# This works as many levels deep as you want; there's no limit.
# Find all Choices for any question whose pub_date is in this year
# (reusing the 'current_year' variable we created above).
>>> Choice.objects.filter(question__pub_date__year=current_year)
[, , ]
# Let's delete one of the choices. Use delete() for that.
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()
>>>
面部測試涉及 django orm 相關知識詳細說明參考 DjangoORM
5. 管理 admin
Django優秀特性, 內置Django admin台管理界面, 便管理者進行添加刪除網站內容.
新建項目系統已經我設置台管理功能見 mysite/settings.py:
INSTALLED_APPS = (
'django.contrib.admin', #默認添加台管理功能
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mysite',
)
同已經添加進入台管理 url, mysite/urls.py 查看:
url(r'^admin/', include(admin.site.urls)), #使用設置url進入網站台
接我需要創建管理用戶登錄 admin 台管理界面:
$ python manage.py createsuperuser
Username (leave blank to use 'june'): admin
Email address:
Password:
Password (again):
Superuser created successfully.
總結
看項目目錄結構:
mysite
├── db.sqlite3
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
├── polls
│ ├── __init__.py
│ ├── admin.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ ├── models.py
│ ├── templates
│ │ └── polls
│ │ ├── detail.html
│ │ ├── index.html
│ │ └── results.html
│ ├── tests.py
│ ├── urls.py
│ ├── views.py
└── templates
└── admin
└── base_site.htm
通面介紹 django 安裝、運行及何創建視 圖模型清晰認識接深入習 django 自化測試、持久化、間件、 際 化等知識
㈥ django創建第一個項目時,輸入django-admin.py startproject djangoweb後,會提示: 這個是什麼原因啊
國內網上找了一圈 那答案水的 為我們的科技擔憂呀 最困慎新解,僅供參考:
方法一(麻煩不推薦):檢查pathon路徑寫了沒。沒寫的創建工程時django-admin.py前要加python。看看有沒有安裝django下的bin路徑寫到系統path里,然後把django安侍純裝的bin/django-admin.py文件拷到你想創建的文件夾下。方法二:寫django下的bin路徑寫到系統汪談敬path里,命令改為「django-admin(沒有py後綴!) startproject web-name「。
㈦ 如何在阿里雲上部署django
前提條件
1. 為 Python 應用程序安裝 virtualenv 和 virtualenv wrapper,目的在於為 Python 項目創建獨立的環境。
● 安裝 pip
sudo apt-get install python-pip
● 安裝 virtualenv
sudo pip install virtualenv
● 創建目錄以存儲您的 virtualenv
mkdir ~/.virtualenvs
● 安裝 virtualenwrapper
sudo pip install virtualenvwrapper
● 將 WORKON_HOME 設置為您的 virtualenv 目錄
導出 WORKON_HOME=~/.virtualenvs
● 將 WORKON_HOME 設置為您的 virtualenv 目錄
導出 WORKON_HOME=~/.virtualenvs
● 將virtualenvwrapper.sh添加到.bashrc
將此行添加到 ~/.bashrc 的末尾,以便載入 virtualenvwrapper 命令。/usr/local/bin/virtualenvwrapper.sh
退出,然後重新打開您的 shell,或者使用.bashrc or source ~/.bashrc命令重新載入 .bashrc,然後一切准備就緒。
2. 安裝 git。
apt-get install git
3. 安裝 Nginx 作為 Web 伺服器,這樣您便可在其之後運行您的應用程序。
Sudo apt-get install nginx
啟動您的第一個 Linux 實例
接下來向您介紹使用阿里雲管理控制台運行 ECS 實例的相關步驟。
1. 登錄到您的帳戶,然後導航到「產品與服務」部分下的「雲伺服器」。單擊側邊欄菜單中的概覽。這會顯示運行中的實例列表。單擊購買實例從任意地域購買實例,或者繼續到下一步創建新實例。
2. 單擊側邊欄菜單中的實例。在實例列表中選擇所需地域,然後單擊右上方欄中的創建實例。
● 將其保存到應用程序目錄上的 uwsgi.ini。如需進一步了解如何編寫 ini 文件,請參閱Python/WSGI 應用程序快速入門。運行此命令以啟動您的應用程序。
uwsgi uwsgi.ini (您的 ini 文件)
12. 更改 nginx 配置文件以用於應用程序。
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name localhost; location /static/ { include uwsgi_params; alias /root/todoApp/public/; } location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock; } }
13. 重啟 nginx,隨後您的應用程序將啟動並在埠 80 上的 nginx 之後運行。
㈧ Django源碼閱讀 (一) 項目的生成與啟動
誠實的說,直到目前為止,我並不欣賞django。在我的認知它並不是多麼精巧的設計。只是由功能堆積起來的"成熟方案"。但每一樣東西的崛起都是時代的選擇。無論你多麼不喜歡,但它被需要。希望有一天,python能有更多更豐富的成熟方案,且不再被詬病性能和可維護性。(屁話結束)
取其精華去其糟粕,django的優點是方便,我們這次源碼閱讀的目的是探究其方便的本質。計劃上本次源碼閱讀不會精細到每一處,而是大體以功能為單位進行解讀。
django-admin startproject HelloWorld 即可生成django項目,命令行是exe格式的。
manage.py 把參數交給命令行解析。
execute_from_command_line() 通過命令行參數,創建一個管理類。然後運行他的 execute() 。
如果設置了reload,將會在啟動前先 check_errors 。
check_errors() 是個閉包,所以上文結尾是 (django.setup)() 。
直接看最後一句 settings.INSTALLED_APPS 。從settings中抓取app
注意,這個settings還不是我們項目中的settings.py。而是一個對象,位於 djangoconf\__init__.py
這是個Settings類的懶載入封裝類,直到 __getattr__ 取值時才開始初始化。然後從Settings類的實例中取值。且會講該值賦值到自己的 __dict__ 上(下次會直接在自己身上找到,因為 __getattr__ 優先順序較低)
為了方便debug,我們直接寫個run.py。不用命令行的方式。
項目下建個run.py,模擬runserver命令
debug抓一下setting_mole
回到 setup() 中的最後一句 apps.populate(settings.INSTALLED_APPS)
開始看 apps.populate()
首先看這段
這些App最後都會封裝成為AppConfig。且會裝載到 self.app_configs 字典中
隨後,分別調用每個appConfig的 import_models() 和 ready() 方法。
App的裝載部分大體如此
為了方便debug我們改寫下最後一句
res的類型是 Command <django.contrib.staticfiles.management.commands.runserver.Command object at 0x00000101ED5163A0>
重點是第二句,讓我們跳到 run_from_argv() 方法,這里對參數進行了若干處理。
用pycharm點這里的handle會進入基類的方法,無法得到正確的走向。實際上子類Commond重寫了這個方法。
這里分為兩種情況,如果是reload重載時,會直接執行 inner_run() ,而項目啟動需要先執行其他邏輯。
django 項目啟動時,實際上會啟動兩次,如果我們在項目入口(manage.py)中設置個print,會發現它會列印兩次。
第一次啟動時, DJANGO_AUTORELOAD_ENV 為None,無法進入啟動邏輯。會進入 restart_with_reloader() 。
在這里會將 DJANGO_AUTORELOAD_ENV 置為True,隨後重啟。
第二次時,可以進入啟動邏輯了。
這里創建了一個django主線程,將 inner_run() 傳入。
隨後本線程通過 reloader.run(django_main_thread) ,創建一個輪詢守護進程。
我們接下來看django的主線程 inner_run() 。
當我們看到wsgi時,django負責的啟動邏輯,就此結束了。接下來的工作交由wsgi伺服器了
這相當於我們之前在fastapi中說到的,將fastapi的app交由asgi伺服器。(asgi也是django提出來的,兩者本質同源)
那麼這個wsgi是從哪來的?讓我們來稍微回溯下
這個settings是一個對象,在之前的操作中已經從 settings.py 配置文件中獲得了自身的屬性。所以我們只需要去 settings.py 配置文件中尋找。
我們來尋找這個 get_wsgi_application() 。
它會再次調用 setup() ,重要的是,返回一個 WSGIHandler 類的實例。
這就是wsgiapp本身。
load_middleware() 為構建中間件堆棧,這也是wsgiapp獲取setting信息的唯一途徑。導入settings.py,生成中間件堆棧。
如果看過我之前那篇fastapi源碼的,應該對中間件堆棧不陌生。
app入口→中間件堆棧→路由→路由節點→endpoint
所以,wsgiapp就此構建完畢,伺服器傳入請求至app入口,即可經過中間件到達路由進行分發。