Мысалы практикалық веб-негізделген терең оқыту және қауіпсіздік

-Дан Daisy
Мысалы практикалық веб-негізделген терең оқыту және қауіпсіздік Үшінші басылым Шарлотт Харпер 3, 3 шілде 2024 ж Жаңартылған / өзгертілген / 2025 жылғы 3 маусым Алғыс: Интернеттегі бағдарламалық қамтамасыздандыруды құрудағы қауіпсіздік мәселелері кез-келген веб-әзірлеушінің жоспары мен орындалуының маңызды бөлігі болып табылады және инженер-прототип инженерлік, тұрақты, тұрақты, және практикалық мақсаттар үшін пайдалы. HTML, JavaScript және CSS, сонымен қатар, Python, c / c ++, j ++, java және bash бағдарламалық жасақтамасын, сондай-ақ шығармашылық бағдарламалық жасақтаманы, сондай-ақ, кішіпейілділік пен сипаттағы бағдарламалық жасақтаманы ұсынады, сонымен қатар, кішіпейілділік пен сипаттағыштарды, сондай-ақ ыңғайлылықты және ыңғайлылық пен маңызды қызметтерді ұсынады Пайдаланушы уақытты өлтіруді немесе Интернетте жасалған бір нәрсені, әдетте сенсорлы экран смартфонында алыңыз. Көптеген адамдар веб-сайтты нөлден бастағысы келетінін білмейді, олар басқа адамның веб-сайтында басталып, әсіресе өздерінің қолтаңбаларында, әсіресе, егер олар өздерінің барлық қуаттылығы, әсіресе, бағдарламалық жасақтаманы ысырап ету үшін, әсіресе, егер олар қолданғыңыз келгеннен кейін, олар қолданғыңыз келгендер үшін, бұл пайдалану ыңғайлылығында шектеулермен қамтамасыз ете алады. Икемділік. Егер сіз осы кітапты оқып, өзіңіз туралы бірнеше минут оқып, өз мақсаттарыңыз туралы біліп, өзіңізбен бірге сөйлесе біліңіз және өзіңізбен бірге өзіңізбен сөйлесіп, біраз уақыт бөліп, келесіге дейін, сіздерде бар және сіз өзіңіз қалаған веб-сайтты және өзіңіз қалаған нәрсені жасап, өзіңіз қалаған нәрсені жасаңыз және өзіңіз қалаған нәрсені жасаңыз және аудиторияның қажеттіліктерін қанағаттандырады. Мен туралы: Мен бағдарламалық жасақтама жасаушымын, C / C ++, Java, Python, HTML, CSS және JavaScript тәжірибесі бар бағдарламалық жасақтама жасаушымын. Мен пайдаланғысы келетін веб-сайттар құрамын, барғысы келеді, тіпті уақытты үйрену, қалпына келтіру және өлтіру үшін, ең бастысы, мен бағдарламалық жасақтаманы сатамын. Егер сіз веб-сайттың көрінуі және жұмыс істеуі туралы дәл болсаңыз, сіз өзіңіз үшін қолдауға дайын болсаңыз, мен сіздікі туралы өз қажеттіліктерімді қанағаттандырғыңыз келсе және сіз өзіңіз, мен сіздерге өзіңіз, мен сізге келесі YouTube, Tiktok, Twitter, Google немесе тіпті жоғары технологиялық қауіпсіздік қолданбасын жасаймын. Сіздерді сатып алудың орнына, мен өз уақытымды сатып алуға тырысып жатырмын: мен сізбен бірге (веб-сайт) өзіңіз бар, сіз бұрыннан бар ақпаратпен (веб-сайт) өзіңізбен сөйлескім келеді және сізге тәуелсіз бағдарламалық жасақтама жасаушы, кәсіпкер, сіз қалаған кез-келген далада табысты мансапқа айналдырғым келеді. Маған түсінікті болсын, мен берген білім туралы бейресми боласыз. Сіз мектепке барып, мұның бәрін мектепте оқып, тіпті осы кітапты оқып, тіпті осы кітапты оқып, тапсырмаңызды аяқтай аласыз және сіздің біліміңізден үлкен келісімді алып тастай аласыз, бірақ мен сізден жиі ыстық орынға салып, тапсырмаларды орындауды сұрамаймын. Мен сенің профессорым емеспін, сен мені жеке жетістікке жетелейтін мансапқа сендіргісі келетін досым сияқты ойлай аласың. Мен сіздерді сәттілік сатпаймын, ол да өз уақытыңызбен сатып алуыңыз керек. Кодекске оқуды үйренудің тік қисық сызығы бар және ешқашан оңай емес, немесе тіпті болуы керек. Сізге мүмкіндігінше көп жұмыс істеу керек, мүмкін, мүмкін және сәтсіздікке ұшырауыңыз керек және сіз өзіңіз үйреніп, оны өзіңіз үйреніп алу үшін де қайталап көріңіз. Бұл кодтың өзіндік сипатында. Кодты бағдарламалаушы қателер туралы хабарламаларды беруге арналған компилятор басқарады және олар сізге қатені іздеу жүйесіне және басқа адамдардың мысалдарын оқып шығыңыз. Айта кету керек, сізге өте бай, ақылды, сәтті, сәтті немесе тіпті егжей-тегжейлі бағдарлау немесе бағдарлама құру үшін ұйымдастырылған болуы керек емес. Компьютер сіз үшін бұл ұйымға қамқорлық жасайды. Сіз тек сынақ пен қателіктерден табандылық танытуыңыз керек, назар аударуыңыз керек және сіз жасаған нәрселеріңізде көп жұмыс істеуі керек, және сіз өзіңіз жасаған нәрселеріңіз үшін өте жақсы мансапқа ие боласыз. Мен кіммін: Соңғы бөлімде оқу туралы көбірек және осы кітаптың жолдары туралы көбірек мәлімет беретінін түсінемін. Мен кіммін? Бұл күрделі сұрақ. Мен өзім туралы түсініксізмін, өйткені мен медициналық жағдайдан зардап шегемін, өйткені мен өзімді таныстыруға келген кезде қиыншылықтарды ұсына алсам, бұл кітапты тіпті кодтап, жаза немесе жаза алады. Қысқаша айтқанда, егер сіз осы кітапты оқып жатсаңыз, сіз оны үйге жеткізіп, пайдалы деп ойладыңыз, себебі сіз оны пайдалы деп ойладыңыз ба, әлде сіз осы уақытқа дейін оқыған болсаңыз да, сіз өзіңіз үшін ойлағандай, сіз өзіңіз жасаған барлық адамдармын. МенӨзім, бағдарламалық жасақтама жасаушы және студент, және мен осы кітапты басқа студенттер үшін жазып отырмын және мен бағдарламалық жасақтама нұсқаулығын жеңілдеткісі келеді, олар өз өмірлерін жеңілдетеді, олар өз өмірлерін жеңілдетеді, олар өз өмірлерін жеңілдетеді, олар бір-бірімен бірге, бұл бизнестің қатарына кіре алмайтын жұмысты, пайдалы, ірі, үйлесімді, бірлескен, біртұтас және тартқыш сияқты. Негізінен, мен осылай істеймін: өзіме және басқа адамдарға жетістікке жету үшін қолданбаларды жасаймын. Мен автормын, бірақ бұл менің алғашқы жарияланымым, бірақ мен портфолиоымды пайдалы құжатқа орналастыру үшін аяқтағым келетіні туралы алғашқы жарияланымым, ал мен де суретшімін. Мен мұны сізге мойындаймын, мен біртүрлі адаммын. Мен кемелді емеспін, мен өзімнің заңмен бірге болдым, тіпті мені колледждер мен университеттерден кетуге және одан да көп жетістікке жету үшін өзіме атау беру үшін мені тастап, кетіп қалдым. Мен туылған әйелмін, мен макияж киемін, өзім суретке түсіремін, өзімді суретке түсіремін, көйлек киемін, басқа әйелдер киімдерін киемін, мен өзімді табиғат ретінде сезінемін. Бұрын менде басқа адамдармен кездесетін басқа адамдармен де, WebApps-пен күресуге, мен бұл кітапты тезірек ала алмағаным үшін кешірім сұраймын. Сіз менікі сияқты және менікі сияқты жұмыс істейтін кодты оқып, жазғыңыз келеді, өйткені егер сіз осы кітапты сатып алғыңыз келсе, өйткені егер сіз осы кітапты сатып алудың орнына, егер сіз өзіңіз үшін ақша табудың орнына, сіз өзіңіз үшін ақша табу үшін өзіңіз үшін сәтті болуыңыз керек ресурстарыңыз бар. Менде отбасылық, денсаулық жағдайлары, дәрігерлер, бұқаралық ақпарат құралдары, бұқаралық ақпарат құралдары, бұқаралық ақпарат құралдары, заңдар мен заңдар, және менің заңнамаларым, және менің заңнамаларым бөлінген және ашуланған әлемдегі феминизм мен әйел табиғатқа ие болды. Алайда, бұл кітап дегеніміз - менің балам, менің балам, менің портфолио және менің өміршеңдігім, сондықтан мен сізден үйреніп, менімен танысқан кезде мұқият қарағаныңыз үшін бағалаймын. Өтінемін, мен кемелді емеспін, бұл кітапта қателер, түзетулер және жаңа басылымдар болады, және сіз өзіңіздің логикалық миыңызбен сіздермен сәтті тәжірибе жинауыңыз үшін ойлануыңыз керек. Сондай-ақ, мен сіз үшін де жақсы дегенімді түсінемін, сіз жазған кезде қиындықтарға тап болсаңыз. Осындай ойланыңыз: сіз кез-келген нәрсені жасау үшін, сіз кез-келген нәрсені жасау үшін, сіз кез-келген ақпаратты, сіз кездесетін барлық ақпаратты сақтай аласыз, оны тексеріп, оны түсініп, оны түсінесіз, сіз оны жұтып, тіпті жариялайсыз. Мен саған айтамын, өйткені мен бірдей қиындықтарға тап боламын. Бұл кітапты өз тәуекеліңізбен пайдаланыңыз, сізден қауіпсіз күйде жұмыс жасаңыз, сіз өзіңіз үшін жұмыс істемей, мен сізге осы мәтінді құрамын, сондықтан мен сізге осы мәтінді алып келмеймін және неге мен сізді ренжітпей аламын, сондықтан мен өзімде қираған, жыртып, жыртылмай, бізде жұмыс істеп, біз жұмыс істейтін желінің параллистік кең ауқымы арқасында жаһандық деңгейде жасаймын. ғаламтор. Сіз менің кім екенімді бірнеше сөзбен танысыңыз, бірақ мен сіздерді оқуға шақыратын шығарсыз, бірақ сіз мені білуге шақырамын, сіз менімен танысып, өз жобаңызды аяқтау үшін өз жобаңызды оқып, түсінесіз. Осы кітаппен үй тапсырмасы болмайды, өйткені сіздің профессорларыңыз немесе мұғалімдер сізге кеңес бермейді, бірақ сіз өзіңіз оқыған кезде өзіңіз, сонымен қатар өзіңіз оқыған кезде өзіңіз, сондай-ақ сіз білгендеріңізді қалай қолдануға болатындығын көрсетеді. Менің капстонама жобам осы кітапта оқылатындығының негізі болып табылады, өйткені мен өзімнің алдыңғы жобаларымнан, мен қолмен жазып, көптеген идеялар мен кеңестер мен танымал қосымшаны айналып, өзім танымал қосымшаны айналып, өзіңіз, Интернетте де, Интернетте де, жаңалықтармен таныса аласыз. Бұл кітап не? Бұл кітап, мысалы, оқу құралы. Кодекс, түзету кодтары және түзету қателері туралы ақпарат, кодты пайдаланып, кодты орналастырыңыз, кодты орналастырыңыз, өзімнің кодты қолданыңыз, сондықтан сіз бұл маңызды, сондықтан сіз өзіңізді, бағдарламаңызды және компанияның суретін қалай сезінесіз, сонымен қатар сіз орнатқан бағдарламалық жасақтама Абсолютті ең жақсы жарық, сіздің соңғы пайдаланушыларыңызға, сіздің веб-сайтыңыздың келушілеріне мүмкіндігінше тартымды болады. Бұл кітапта мен Интернеттегі бағдарлама, сондай-ақ қауіпсіздік, сондай-ақ қауіпсіздік түрімен бірге бағдарламалық жасақтаманың мысалдарын көрсетемін. Біз оқуды бастаймызрияМысалы практикалық веб-негізделген терең оқыту және қауіпсіздік Үшінші басылым Шарлотт Харпер 3, 3 шілде 2024 ж Жаңартылған / өзгертілген / 2025 жылғы 3 маусым
Алғыс:
Интернеттегі бағдарламалық қамтамасыздандыруды құрудағы қауіпсіздік мәселелері кез-келген веб-әзірлеушінің жоспары мен орындалуының маңызды бөлігі болып табылады және инженер-прототип инженерлік, тұрақты, тұрақты, және практикалық мақсаттар үшін пайдалы. HTML, JavaScript және CSS, сонымен қатар, Python, c / c ++, j ++, java және bash бағдарламалық жасақтамасын, сондай-ақ шығармашылық бағдарламалық жасақтаманы, сондай-ақ, кішіпейілділік пен сипаттағы бағдарламалық жасақтаманы ұсынады, сонымен қатар, кішіпейілділік пен сипаттағыштарды, сондай-ақ ыңғайлылықты және ыңғайлылық пен маңызды қызметтерді ұсынады Пайдаланушы уақытты өлтіруді немесе Интернетте жасалған бір нәрсені, әдетте сенсорлы экран смартфонында алыңыз. Көптеген адамдар веб-сайтты нөлден бастағысы келетінін білмейді, олар басқа адамның веб-сайтында басталып, әсіресе өздерінің қолтаңбаларында, әсіресе, егер олар өздерінің барлық қуаттылығы, әсіресе, бағдарламалық жасақтаманы ысырап ету үшін, әсіресе, егер олар қолданғыңыз келгеннен кейін, олар қолданғыңыз келгендер үшін, бұл пайдалану ыңғайлылығында шектеулермен қамтамасыз ете алады. Икемділік. Егер сіз осы кітапты оқып, өзіңіз туралы бірнеше минут оқып, өз мақсаттарыңыз туралы біліп, өзіңізбен бірге сөйлесе біліңіз және өзіңізбен бірге өзіңізбен сөйлесіп, біраз уақыт бөліп, келесіге дейін, сіздерде бар және сіз өзіңіз қалаған веб-сайтты және өзіңіз қалаған нәрсені жасап, өзіңіз қалаған нәрсені жасаңыз және өзіңіз қалаған нәрсені жасаңыз және аудиторияның қажеттіліктерін қанағаттандырады.Мен туралы: Мен бағдарламалық жасақтама жасаушымын, C / C ++, Java, Python, HTML, CSS және JavaScript тәжірибесі бар бағдарламалық жасақтама жасаушымын. Мен пайдаланғысы келетін веб-сайттар құрамын, барғысы келеді, тіпті уақытты үйрену, қалпына келтіру және өлтіру үшін, ең бастысы, мен бағдарламалық жасақтаманы сатамын. Егер сіз веб-сайттың көрінуі және жұмыс істеуі туралы дәл болсаңыз, сіз өзіңіз үшін қолдауға дайын болсаңыз, мен сіздікі туралы өз қажеттіліктерімді қанағаттандырғыңыз келсе және сіз өзіңіз, мен сіздерге өзіңіз, мен сізге келесі YouTube, Tiktok, Twitter, Google немесе тіпті жоғары технологиялық қауіпсіздік қолданбасын жасаймын. Сіздерді сатып алудың орнына, мен өз уақытымды сатып алуға тырысып жатырмын: мен сізбен бірге (веб-сайт) өзіңіз бар, сіз бұрыннан бар ақпаратпен (веб-сайт) өзіңізбен сөйлескім келеді және сізге тәуелсіз бағдарламалық жасақтама жасаушы, кәсіпкер, сіз қалаған кез-келген далада табысты мансапқа айналдырғым келеді. Маған түсінікті болсын, мен берген білім туралы бейресми боласыз. Сіз мектепке барып, мұның бәрін мектепте оқып, тіпті осы кітапты оқып, тіпті осы кітапты оқып, тапсырмаңызды аяқтай аласыз және сіздің біліміңізден үлкен келісімді алып тастай аласыз, бірақ мен сізден жиі ыстық орынға салып, тапсырмаларды орындауды сұрамаймын. Мен сенің профессорым емеспін, сен мені жеке жетістікке жетелейтін мансапқа сендіргісі келетін досым сияқты ойлай аласың. Мен сіздерді сәттілік сатпаймын, ол да өз уақытыңызбен сатып алуыңыз керек. Кодекске оқуды үйренудің тік қисық сызығы бар және ешқашан оңай емес, немесе тіпті болуы керек. Сізге мүмкіндігінше көп жұмыс істеу керек, мүмкін, мүмкін және сәтсіздікке ұшырауыңыз керек және сіз өзіңіз үйреніп, оны өзіңіз үйреніп алу үшін де қайталап көріңіз. Бұл кодтың өзіндік сипатында. Кодты бағдарламалаушы қателер туралы хабарламаларды беруге арналған компилятор басқарады және олар сізге қатені іздеу жүйесіне және басқа адамдардың мысалдарын оқып шығыңыз. Айта кету керек, сізге өте бай, ақылды, сәтті, сәтті немесе тіпті егжей-тегжейлі бағдарлау немесе бағдарлама құру үшін ұйымдастырылған болуы керек емес. Компьютер сіз үшін бұл ұйымға қамқорлық жасайды. Сіз тек сынақ пен қателіктерден табандылық танытуыңыз керек, назар аударуыңыз керек және сіз жасаған нәрселеріңізде көп жұмыс істеуі керек, және сіз өзіңіз жасаған нәрселеріңіз үшін өте жақсы мансапқа ие боласыз.
Мен кіммін: Соңғы бөлімде оқу туралы көбірек және осы кітаптың жолдары туралы көбірек мәлімет беретінін түсінемін. Мен кіммін? Бұл күрделі сұрақ. Мен өзім туралы түсініксізмін, өйткені мен медициналық жағдайдан зардап шегемін, өйткені мен өзімді таныстыруға келген кезде қиыншылықтарды ұсына алсам, бұл кітапты тіпті кодтап, жаза немесе жаза алады. Қысқаша айтқанда, егер сіз осы кітапты оқып жатсаңыз, сіз оны үйге жеткізіп, пайдалы деп ойладыңыз, себебі сіз оны пайдалы деп ойладыңыз ба, әлде сіз осы уақытқа дейін оқыған болсаңыз да, сіз өзіңіз үшін ойлағандай, сіз өзіңіз жасаған барлық адамдармын. Мен өзім, бағдарламалық жасақтама жасаушы және студентпін, және мен осы кітапты басқа студенттерге жазып отырмын және мен басқа студенттерге жазып отырмын, олар өз өмірлерін жеңілдеткісі келеді, олар өз өмірлерін жеңілдетеді, олар өз өмірлерін жеңілдетеді, олар өз өмірлерін жеңілдетуге мүмкіндік береді, олар бизнестің қатарына кіре алмайтын, бұл бизнес желісіне жете алмайды. Негізінен, мен осылай істеймін: өзіме және басқа адамдарға жетістікке жету үшін қолданбаларды жасаймын. Мен автормын, бірақ бұл менің алғашқы жарияланымым, бірақ мен портфолиоымды пайдалы құжатқа орналастыру үшін аяқтағым келетіні туралы алғашқы жарияланымым, ал мен де суретшімін. Мен мұны сізге мойындаймын, мен біртүрлі адаммын. Мен кемелді емеспін, мен өзімнің заңмен бірге болдым, тіпті мені колледждер мен университеттерден кетуге және одан да көп жетістікке жету үшін өзіме атау беру үшін мені тастап, кетіп қалдым. Мен туылған әйелмін, мен макияж киемін, өзім суретке түсіремін, өзімді суретке түсіремін, көйлек киемін, басқа әйелдер киімдерін киемін, мен өзімді табиғат ретінде сезінемін. Бұрын менде басқа адамдармен кездесетін басқа адамдармен де, WebApps-пен күресуге, мен бұл кітапты тезірек ала алмағаным үшін кешірім сұраймын. Сіз менікі сияқты және менікі сияқты жұмыс істейтін кодты оқып, жазғыңыз келеді, өйткені егер сіз осы кітапты сатып алғыңыз келсе, өйткені егер сіз осы кітапты сатып алудың орнына, егер сіз өзіңіз үшін ақша табудың орнына, сіз өзіңіз үшін ақша табу үшін өзіңіз үшін сәтті болуыңыз керек ресурстарыңыз бар. Менде отбасылық, денсаулық жағдайлары, дәрігерлер, бұқаралық ақпарат құралдары, бұқаралық ақпарат құралдары, бұқаралық ақпарат құралдары, заңдар мен заңдар, және менің заңнамаларым, және менің заңнамаларым бөлінген және ашуланған әлемдегі феминизм мен әйел табиғатқа ие болды. Алайда, бұл кітап дегеніміз - менің балам, менің балам, менің портфолио және менің өміршеңдігім, сондықтан мен сізден үйреніп, менімен танысқан кезде мұқият қарағаныңыз үшін бағалаймын. Өтінемін, мен кемелді емеспін, бұл кітапта қателер, түзетулер және жаңа басылымдар болады, және сіз өзіңіздің логикалық миыңызбен сіздермен сәтті тәжірибе жинауыңыз үшін ойлануыңыз керек. Сондай-ақ, мен сіз үшін де жақсы дегенімді түсінемін, сіз жазған кезде қиындықтарға тап болсаңыз. Осындай ойланыңыз: сіз кез-келген нәрсені жасау үшін, сіз кез-келген нәрсені жасау үшін, сіз кез-келген ақпаратты, сіз кездесетін барлық ақпаратты сақтай аласыз, оны тексеріп, оны түсініп, оны түсінесіз, сіз оны жұтып, тіпті жариялайсыз. Мен саған айтамын, өйткені мен бірдей қиындықтарға тап боламын. Бұл кітапты өз тәуекеліңізбен пайдаланыңыз, сізден қауіпсіз күйде жұмыс жасаңыз, сіз өзіңіз үшін жұмыс істемей, мен сізге осы мәтінді құрамын, сондықтан мен сізге осы мәтінді алып келмеймін және неге мен сізді ренжітпей аламын, сондықтан мен өзімде қираған, жыртып, жыртылмай, бізде жұмыс істеп, біз жұмыс істейтін желінің параллистік кең ауқымы арқасында жаһандық деңгейде жасаймын. ғаламтор. Сіз менің кім екенімді бірнеше сөзбен танысыңыз, бірақ мен сіздерді оқуға шақыратын шығарсыз, бірақ сіз мені білуге шақырамын, сіз менімен танысып, өз жобаңызды аяқтау үшін өз жобаңызды оқып, түсінесіз. Осы кітаппен үй тапсырмасы болмайды, өйткені сіздің профессорларыңыз немесе мұғалімдер сізге кеңес бермейді, бірақ сіз өзіңіз оқыған кезде өзіңіз, сонымен қатар өзіңіз оқыған кезде өзіңіз, сондай-ақ сіз білгендеріңізді қалай қолдануға болатындығын көрсетеді. Менің капстонама жобам осы кітапта оқылатындығының негізі болып табылады, өйткені мен өзімнің алдыңғы жобаларымнан, мен қолмен жазып, көптеген идеялар мен кеңестер мен танымал қосымшаны айналып, өзім танымал қосымшаны айналып, өзіңіз, Интернетте де, Интернетте де, жаңалықтармен таныса аласыз.Бұл кітап не? Бұл кітап, мысалы, оқу құралы. Кодекс, түзету кодтары және түзету қателері туралы ақпарат, кодты пайдаланып, кодты орналастырыңыз, кодты орналастырыңыз, өзімнің кодты қолданыңыз, сондықтан сіз бұл маңызды, сондықтан сіз өзіңізді, бағдарламаңызды және компанияның суретін қалай сезінесіз, сонымен қатар сіз орнатқан бағдарламалық жасақтама Абсолютті ең жақсы жарық, сіздің соңғы пайдаланушыларыңызға, сіздің веб-сайтыңыздың келушілеріне мүмкіндігінше тартымды болады. Бұл кітапта мен Интернеттегі бағдарлама, сондай-ақ қауіпсіздік, сондай-ақ қауіпсіздік түрімен бірге бағдарламалық жасақтаманың мысалдарын көрсетемін. Біз Unix Shell көмегімен базалық жобаны құру арқылы біз оқу тәжірибесін бастаймыз, резервтік және сценарийлік мүмкіндіктері бар. Содан кейін біз блогтың негізгі веб-сайтын қарастырып, блогымызды қарап шығамыз, сонымен қатар, фото және бейне мүмкіндіктері бар, сонымен қатар, осы мүмкіндіктерді ақысыз бағдарламалық жасақтаманы пайдаланып, қауіпсіз шешімдерді пайдалану және қосылатын аутентификация модулін (PAM) пайдаланып пайдаланыңыз. Содан кейін біз файлдарды өңдеу және өңдеу, бейнені редакциялау, дауыстық қайырымдылық, штрих-кодты қарап шығу және басқа ұғымдар арасында оптикалық тануды қарастырамыз. Жол бойында біз бағдарламалық жасақтаманы пайдалы және қауіпсіз, ақысыз және ақылы нұсқалармен қамтамасыз етуге көмектесетін API-ді қарастырамыз. Жол бойында біз баррелі және қайталанулар, мұнараны және драйнерлік дизайнды, мұнараны және дроналауды, сондай-ақ өз бағдарламалық жасақтамамызды қорғау және өзін-өзі қорғау және қайта танысу үшін бағдарламалық жасақтамамен біріктіретін физикалық қауіпсіздік пен содырлы құралдарды зерттейміз. Біз ойындар, 2D және 3D-ді көрсету жолымен үзіліс жасаймыз және жүйеге арналған жабдықпен, егер силикон резюсінде силикон резеңкедегі негізгі өлшемді бағдарламалық қамтамасыздандырудың мысалында және электронды тербелісі мысалдарымен жұмыс жасаймыз. Жол бойында біз бағдарламалық жасақтаманы жақсарту үшін қол жетімді машиналарды оқытудың шешімдерін де қолданамыз. Сондай-ақ, біз процесті жеңілдету және қорғау үшін Интернетте қол жетімді қор құралдарын қолданамыз. Бұл кітап веб-қосымшаны құрып, оны компьютердің және ендірілген механикалық жүйелердің кәсіби желісімен біріктіру және жалпы білім беретін және алдыңғы тәжірибесі жоқ бағдарламалық жасақтама және ендірілген аппараттық құралға нұсқаулық.
Бұл кітап деген не? Егер сіз шынымен веб-сайт алғыңыз келсе, сіз жай ғана қарапайым дүкенді орнатып, қажет нәрсені сата аласыз, блогты орналастыра аласыз, фотосуреттерді немесе бейнелерді орналастыра аласыз, немесе ешқашан кодтың бір жолын жазасыз. Бұл кітап бұл емес. Бұл кітап сізге кез-келген бағдарламалық жасақтаманы қолданатын бағдарламалық жасақтаманы қалай құру керектігін үйретеді, себебі ол кез-келген бағдарламалық жасақтаманы орналастырады, өйткені ол әлі де прототиптермен жұмыс істейді, өйткені ол әлі де прототиптермен жұмыс істеуі мүмкін, ал артқа қарай жұмыс істемеуі мүмкін, ал артқа, жинақталған компаниялар ештеңе істемейтін адамдарға ақша табу үшін құрылған. Егер сіз осы кітапты мұқият ұстансаңыз, сіз кодты, зерттеу кодын жазғыңыз келеді, өз бағдарламаларыңызды жасаңыз, сонда сіз өзіңізден ақша табасыз. Мен осы кітаптан, тіпті ерте сатысында, өйткені оның құрамында адамдар қажет және оқығысы келетін ақпарат бар, және олар менің қолданбаларымды сатып алған немесе пайдаланған кезде сатып алуда. Бұл кітап сіз үшін қолданба құрбайды, бірақ сіз өзіңіздің барлық құралдарыңызбен және веб-сайтқа арналған бағдарламалық жасақтамамен, сіз және сіздің қол жетімділігіңізбен, сіз және сіздің қолдауыңызбен, сіз және Интернеттегі бағдарламалық жасақтаманы жеңілдетесіз, олар сізге және Интернеттегі және Интернеттегі қолдауды көрсетеді.Сіз не үйренесіз: Бұл кітап сізге бағдарламалық жасақтаманы, шын мәнінде функционалды, пайдалы бағдарламалық жасақтаманы, медиа жазбаларын, медиа жазу, қауіпсіздік мүмкіндіктерін, бейне және фотосуреттерді сканерлеу, бейне және фотосуреттер, Bluetooth және Conform (NFC) байланыстыру және сату әдісі сізге қалай көмектеседі? Бұл кітап сіздерге желілік хабарламалармен, автоматтандырылған, автоматтандырылған желмен айналысу үшін осы кітап кодын қалай құруға, стильді желілік компьютерді қалай құруға болатынын үйретеді. Бағдарламалық жасақтама, id сканерлеу, кескін және бейне модерациясы, бағдарламалық қамтамасыздандыру, төлемді өңдеу, криптокөрмендік сауда-саттық, асинхронды тапсырмалар және басқалар. Сіз өзіңіздің Bluetooth құрылғыларыңызды, зарядтағыштар, зарядтағыштар, микроконтроллерлер, схемалар, қозғалмақтар, электр қозғалтқыштары және датчиктер, дәнекерлер, сымдар және 3D препараттарын, сондай-ақ кастинг материалдарын қолдана отырып, қалай құруға болатындығын білесіз. Мен 3D дизайнерлік принциптерін көрсетемін, бұйымдар өндірісіне және құралды және өлім жасауға және өлімге қол жеткіземін, сондықтан сіз біріктірілген батареялары бар, зарядтағыштар, электронды тізбектер және функционалды нәтижелермен бірге өндіре аласыз. және оларды Bluetooth және Web арқылы желіңіз. Атап айтқанда, біз екі кейс-стади, дірілдейтін массажшы және үйде қолдануға болатын, ол графикалық интерфейс немесе пәрмен жолының утилитасы ретінде бағдарламаланған, ол графикалық интерфейс немесе пәрмен жолының утилитасы ретінде бағдарламаланады және жылдам нәтиже алу үшін Интернетте біріктірілуі мүмкін. Сіз веб-сайтты жерден қалай құруға және орналастыруды үйренесіз, алдын-ала тәжірибесі жоқ, оны функционалды, қауіпсіз, әдемі, пайдалы және ең бастысы. Сайтты қауіпсіз және практикалық және аудио веб-сайттарыңызды құрайтын, музыканы және дыбысты жасау, музыка жасау, музыка жасау, модулдеуді және басқа веб-сайттарды құруға болатынын және басқа веб-сайттарды құруға болатынын және басқа веб-сайттарды модуляциялауды үйренесіз. Бұл кітапта көптеген үш компонент болып табылатын негізгі үш компонент болып табылатын медиа, қауіпсіздік және машиналық оқытуға бағытталған, бұл сізге дұрыс пайдаланушыларды тарту арқылы пайдалы бағдарламалық жасақтаманы құруға және дұрыс, практикалық, қолмен, қолдармен және араласумен, сонымен қатар, автоматты, алынды және берік болып табылады. Бұл кітап UNIX, арнайы Debsian (Ubuntu), BASH Shell, Python, Python, CSS, CSS, CSS, JavaScript және Python үшін бірқатар пайдалы бағдарламалық қамтамасыз ету, сонымен қатар сұраныстар, сондай-ақ GIT және FFMPEG пайдалы. Сондай-ақ, мен сізге Cryptocurrency сауда-саттықты қалай үйренемін және Cryptocurrency немесе төлемдер үшін төлемдер үшін төлемдер, егер сіз өзіңіздің кірістеріңізден түскен кезде, тіпті егер сіз өзіңіздің кірістеріңізді төлеген болсаңыз да, кірістеріңіздің үлесін төлей аламын. Мен сізге веб-сайтыңыздан жарнама арқылы қалай ақша табуды үйретемін, сонымен қатар сіздің бағдарламаңызды іздеу және оны тез жасау және оны тез жасау үшін, клиенттердің сізді іздейтіні және мүмкіндігінше көп іздеулерде рейтингке бөленіңіз. Мен сізге бағдарламалық жасақтаманы сатуды, жарнаманы қалай сатуға болатынын, өз қызметтеріңізді іздейтіндігіңізді, өз қызметтеріңізді сұраймын және өзіңіз бұрыннан бар даңғылдар арқылы өзіңіз үшін асығыңыз, арзан және жақсы жұмыс істейді. Мен сізге жұмыс істейтін және деректерді қалай сақтау керектігін және деректерді қалай сақтауға болатынын және сіздің пайдаланушыларыңызды қалай жасайтынын және қалай сақтау керек, бұл сіздің пайдаланушыларыңызды өз пайдаланушыларыңызды өз пайдаланушыларыңызды тек сіздің веб-сайтыңызға қайта-қайта кіргізу керек. Бұл кітаптан фотосуреттерден фотосуреттерден бастап, аудиоға бейнероликтермен (сіздің клиенттеріңіз), сіз өзіңіздің және тек сізді құрайтын қолданбаны, сіздің бағдарламалық жасақтама және сіздің компанияңыздың ең жақсы жолымен жақсы әсер етудің практикалық тұрғыдан бас тартудың және таратудың практикасына назар аударады. Сіз менден бірнеше кеңестер мен трюктарды, макияж мен фото, модельдеу және әрекет ету сияқты бірнеше кеңестер мен трюктер, модельдеу және әрекет ету, өзіңіз үшін қол жетімді барлық құралдарды қолдана отырып, сіз үшін барлық құралдарды қолдана отырып, қажет болған жағдайда, қажет болғанша, қажет болғанша, қажет болғанша, қажет емес. Бұл кітап «практикалық» деп аталадыМысал бойынша веб-негізделуге және қауіпсіздікті бағалаумен, дәлірек, бұл мәтіннің оқу компоненті, сонымен қатар, бұл мәтінді оқытудың негізгі бөлігі, сонымен қатар, сіз компьютерге арналған практикалық мақсаттарға ие, мен сізге компьютердің көру қабілетін, бетті тану, кескінді тану, кескін және бейне модерациясы, кескінді жақсарту, ажыратымдылықты жақсарту, кескіннің тіркесі және суреттерден алынған басқа тапсырмалар, мысалы, кескіннің түпнұсқалық, препарат және бағдарламалық қамтамасыздандыру ретінде, өйткені ол басқа, басылған суреттерге сәйкес келеді. Сіздің бетіңіз. Серверлік компьютерді сізге пайдаланушыға қауіпсіз етуі мүмкін, әдетте, сізден логин мен жаңа IP мекен-жайы үшін, мүмкін, оңай, күрделі және қуатты бағдарламалық жасақтамамен, мүмкін болуы мүмкін. Бағдарламалық жасақтамаңызға арналған бағдарламалық жасақтама, сіз өзіңіздің бағдарламалық жасақтамаңызға тым мұқият болыңыз, бұл бағдарламалық жасақтама немесе мәтіндік хабарлама қызметі сияқты, немесе кез-келген адам) (кез келген сайт). Мүмкіндігінше сенімді бағдарламалық жасақтаманы құрған кез-келген адам бұл нені білдіреді. Бағдарламалық жасақтама қауіпті, өйткені біз оған қол жеткізу үшін қолданатын құрылғылар мен есептік жазбалар әрқашан біздің қолымызда бола бермейді, олар кез-келген адамның қолында, олар бағдарламалық жасақтама үшін науқасқа ие бола алады, сондықтан бағдарламалық жасақтамаға қауіп төндіруі мүмкін. Бұл осы кітаптың басты бағыты. Желілік компьютер әдепкі бойынша, SSH немесе SCEL SHULL SHALL батырмасы бар, әйтпесе Web Shell батырмасы бар және басқаша веб-сервермен қамтамасыз етіледі, өйткені веб-сервер ашық қол жеткізуді, сонымен қатар серверде жұмыс істейтін көркемдік құралдардың күйі. Веб-сервер пайдаланушының веб-шолғышына қол жеткізе алады, бұл пайдаланушының ең қуатты бөлігі болып табылады, себебі бұл пайдаланушы желілік бағдарламалық жасақтамаға қол жеткізе алатын орын. Бұл құралдар мәтін, сіз көретін веб-беттерді, аудио және видеоды тіркей алады, сонымен қатар Bluetooth радио құрылғыларын оқи және жаза алады, сонымен қатар далалық радионаттарды оқи және жаза алады және WELDERS, фробс, жапсырмалар, сақиналар және тіпті веб-сайтқа байланған веб-сервермен расталуы мүмкін. Барлық құралдарды өз қолыңызбен пайдаланыңыз, сіз осы кітаппен сіз өзіңізді қауіпсіз веб-сайт құру үшін білесіз, ал сіз үшін жұмыс істейтін қауіпсіз желілік компьютерлік жүйе сіздің сауда-саттыққа және сезінесіз
Қайда бастау керек: Сізге осы кітапты немесе кез-келген бөлімнен өткеннен кейін, сізге қажет, әсіресе, егер сіз жоғарыда аталған құралдармен немесе кез-келген жоғарыда сипатталған құралдармен, мен осы кітапта егжей-тегжейлі сипаттайтын болсаңыз, менде құжаттаманы пайдалану және олардың практикалық мысалдары туралы ойлана бастаймын. Егер сізде кодты жазу бойынша тәжірибе болмаса, мен осы кітаптың барлығын оқуға кеңес беремін, әсіресе сіз осы кітаптың сізге сәйкес келетініне көз жеткізіңіз. Егер бұл кітап сіз үшін дұрыс болмаса, оны веб-дамытыңыз немесе туысқаны туралы ойланыңыз, олар өздерін дамыту туралы білуге қызығушылық танытуы мүмкін, оларды өзіңізден-ақ, мен сізден бұрын-соңды мұғалім ретінде немесе басқа мұғалімдер жасағым келген олқылықтарды толтыруды ойластырыңыз. Қаласаңыз, осы кітаптың әр бөлігі пайдалы қолданбаны құрғыңыз келсе және ең жақсы қолданбалар соңғы пайдаланушымен салынғанын ескеріңіз. Енді сіз мені білесіз, сіз бұл кітапты білесіз, және сіз бастауға дайынсыз. Бастау үшін, компьютерді алыңыз (тіпті ең арзан ноутбук, тіпті ең арзан ноутбук, Amazon немесе ескі жұмыс үстелі жұмыс істейді және оны сіз үшін жұмыс істейтін етіп орнатыңыз.Бұл кітапты қалай оқуға болады: Бөлектелген мәтін, мәтін пәрмен жолында жататынын білдіреді, онда сіз басқаратын кодты жазасыз. Пәрмен жолының шақыруы - бұл қатты пернетақтаға бағытталған және жұмыс процесін тездетіп, сізге жеңілдететін және сізге жеңілдететіні туралы аз уақыт қажет.
Бастау: Кетейік. Біз жергілікті машинада құрылыс кодынан бастаймыз және Интернетке қосылған веб-сайтты құрмай бастаймыз. Бұл алдын-ала бастауға, шығынға түспейді және сізге оңай. Амалдық жүйеге байланысты, Баш қабығына ену сәл өзгеше болады. Mac OS үшін мен виртуалды машинаны осы уақытта орнатуды ұсынамын, өйткені сіз виртуалды машинамен үйлесімділікті аласыз. VirtualBox және паралеллдер сияқты түрлі провайдерлер сіз үшін виртуалды машинаны іске асыра алады, дегенмен, егер сіз тез, жетілдірілген тәжірибені құру үшін ұсынылған жергілікті ортақ пайдаланған болсаңыз, ubuntu-ді тікелей машинада орнатуға болады. Егер сіз Linux немесе Windows қолдансаңыз, мен ұсынатын Linux немесе Windows қолдансаңыз, жобаны жасау өте оңай болуы керек. Терминалды ашып, өлшемді өзіңіз қалағандай реттеңіз және 2-қадамнан бастаңыз. Егер сіз Windows жүйесін қолдансаңыз, 1-қадамды орындаңыз.1-қадам: - тек Windows пайдаланушылары Windows жүйесінде әкімші және түрі ретінде пәрмен жолын ашыңыз WSL-рәсім
2-қадам: - Егер сіз Windows пайдаланбасаңыз, осы жерге жалғастырыңыз немесе 1-қадамды өткізіп жіберіңіз Ашық терминалда (UBUNTU Windows жүйесінде, Mac немесе Linux терминалы немесе Linux терминалы немесе ұқсас атау), осыған ұқсас атаумен байланысты). Біз мұны Mkdir командасымен жасаймыз, ол каталог жасайды. Егер сіз өз жобаңызды сақтау үшін каталогты жасау қажет болса, ұсынылады, CD пәрменін каталогқа және жәнеCD / жол / Каталог - жол - жол - бұл сіздің тағайындалған каталогыңыздың алдындағы қалталар (файлдар), әдепкі жол - ~ немесе / үй / пайдаланушы аты (пайдаланушы аты - пайдаланушы аты). Әдепкі каталогқа ауысу үшін CD немесе CD деп теріңіз mkdir мысалы - каталогтың атауымен «мысал» ауыстырыңыз
Енді сіздің жобаңыз үшін жұмыс каталогы бар. Егер сіз осы каталогты сақтағандай, сіз басқа машинаны ауыстыруыңыз керек болғандықтан, сіз жазған кодты орналастырғаныңыз үшін өте маңызды болғандықтан, сіз жазған кодты орналастырыңыз, сондықтан ол веб-сайтқа дайын болады, біз келесі бірнеше қадамдарда каталогтың сақтық көшірмесін жасаймыз. Бірақ сценарий салу біршама код алады, ал кодты мүмкіндігінше пайдалы болу керек. Алдымен сценарийлер салу үшін сценарий салейік. Сценарийді құру және оны орындаудан бастайық. Біз Sudo, Chmod және осыған қол тигізіп, «ASCRIPT» сценарийіне қоңырау шаламыз.Sudo Touch / USR / BON / ASCRIPT Sudo Chmod a + x / usr / bin / bin / bin / ascript Sudo Nano / USR / BON / ASCRIPT
Енді біз сценарий жасадық, оны орындалды және оны өңдеуге дайынбыз. NANO - мәтіндік редактор, ол сіз мәтінді басусыз өңдеуге мүмкіндік береді, ол графикалық пайдаланушы интерфейсін қолданудан әлдеқайда оңай. Нано бар файлды өңдеу үшін NANO пайдаланыңыз, содан кейін файлға апарыңыз. Сценарий жасайтын сценарий жасау үшін бұл біздің сценарийімізді бірінші кезекте жасауға өте ұқсас. Біз жоғарыдағыдай кодты, сценарийдің атын «ASCRIPT», «ASCRIPT» аргумент параметрімен, $ 1 етіп ауыстырамыз. Бұл Sudo Ascript Newscript-ті теру арқылы сценарийге қоңырау шалуға мүмкіндік береді, бұл кез-келген жаңа сценарийді «Newscript» сценарийінің атымен алмастыра аламыз. Нанодағы код келесідей болуы керек:sudo touch / usr / bin / bin / $ 1 sudo cmmod a + x / usr / bin / bin / $ 1 Судо NANO / USR / BIN / $ 1
Наноды жабу үшін, біз басқару кілтін басып тұрып, x түймесін басып, y түймесін басыңыз, содан кейін біз файлды сақтап, қайтаруды білдіру үшін Y түймесін басыңыз. Енді осы үш пәрменді терудің орнына, сценарийді өңдеу үшін Sudo Ascript-ті сценарийді қайта өңдеу үшін тере аламыз. Бұл жұмыс! Кез-келген жаңа сценарийді Shell-ге шақыру арқылы оңай пайдалануға болады. Қазір жұмысымызды сақтайық: Жаңа сценарийді сақтау үшін сақтық көшірме сценарийін жазайық, содан кейін оны біздің жобалау каталогында сақтық көшірмесін жасаңыз, сонымен қатар резервтік сценарийдің сақтық көшірмесін жасаңыз.Sudo Ascript
Енді, Нанода:Sudo CP / USR / bin / Сақтық көшірме / жол / Кім / Каталог / Sudo CP / USR / BBON / ASCRIPT / жол / КОРПОРАТИВТОР /
Қайда / жол / каталогы / каталогы - MKDIR жасаған жобаның жолы. Кейінірек біз осыған ұқсас жолдарды циклмен және тізіммен қалай көшіруге болатынын білеміз, ол аз код, бірақ қазір оны қарапайым етіп, бірнеше жолға ие болайық. Осы сценарийді іске қосу және кодтың сақтық көшірмесін жасау үшін, файлды Nano-да басқару + x, y және қайтару арқылы сақтаңыз және төмендегіні снарядқа енгізіңізсақтық көшірме
Егер сізге осы кітапты оқып, снарядта пароль сұралса, сізден сұраныс сұралса, пайдаланушы құпия сөзін дұрыс енгізіңіз, сіз пәрменді қайта іске қоспас бұрын үш рет жүресіз. Жоғары және төмен көрсеткілерді RERUN командаларына және өңдеуге пайдалануға болады, егер сіз екі рет іске қосуыңыз керек болса, оны өңдеуіңіз керек. Қарапайым жоғарыдан жоғары және төмен басып, пәрменді таңдау үшін, пәрменді оң жақ, сол жақ көрсеткілермен өңдемес бұрын және пернетақтаны, сондай-ақ пернетақтаны және оны қайтару арқылы іске қоспас бұрын.Құттықтаймыз! Сіз жұмыс каталогында екі маңызды сценарийді қайтаратын керемет резервтік сценарий жасадыңыз. Жоба үлкенірек болғандықтан, біз оларды кейінірек жылжытуымыз мүмкін, бірақ бұл қазір жұмыс істейді. Бұлтта біз үшін Githe-ді қолданамыз, біз бұл үшін Github-ті қолданамыз (кері байланыс үшін басқа да кеңестер бар. Бағдарламалық жасақтаманы үнемдеудің құралдары, әсіресе, егер біз Code-дің бір сызығы істен шыққан кезде, егер сіз оны автоматты түрде қайтарып алмасаңыз, кодтың сақтық көшірмесін жасамаған кезде, сіз оны автоматты түрде қайтарып алмаған кезде, сіз оны сақтамасаңыз, оны сақтайды.
Егер сіз Ubuntu виртуалды машинасын осы кезде қолданбасаңыз, мен осы кезде ubuntu виртуалды машинасын пайдаланып, жұмысыңызды жеңілдететіндіктен, жұмыс веб-сайттарын салу және компьютердегі терең оқыту әрекеттерін алдын-ала орнату кезінде өз өміріңізді жеңілдетеді. Біз кодты жақын арада веб-серверге жылжытамыз, бірақ біз фишингке төзімді және осы үшін бірқатар Linux пакеттерін пайдаланып, кем дегенде бірнеше қауіпсіздік қабаттарының бар екеніне көз жеткізгіміз келеді. Егер сіз әлі де Mac OS пайдаланғыңыз келсе, сізге онлайн режимінде қажетті пакеттерді іздеуге және орнатуға шақырамыз, бірақ әр бума үшін балама болмауы мүмкін, бірақ бұл кітап немесе сериялардың әр қаптамасы үшін балама болмайды.SURDO ASCRIPT командасын орындау арқылы сақтық көшірме сценарийімен жұмыс жасау үшін бірнеше команданы қосайық.
# ... git add -all «Сақтық көшірме» git -M git push -u бастапқы шебері...
Тағы бір рет, сақтау үшін x басқарыңыз.sudo touch /usr/bin/ascript
sudo chmod a+x /usr/bin/ascript
sudo nano /usr/bin/ascript
Енді бізге осы жоба үшін бір рет конфигурация жасау керек. Көп ұзамай ол GIT жобасы болады, біз әр түрлі команданы гит репозиторийінен терудің қажеті жоқ, бірақ біз орналастыру сценарийлерін жазған кезде бұған ілінеміз. Бастау үшін, дұрыс каталогта екендігімізге және GIT репозиторийін баптап, SSH кілттерін жасаңыз.CD / жол / каталог git init git филиалы - мастер ssh-keygen
SSH-KEYGE тергеннен кейін, жаңа кілтті үй қалтасында қоңырау шалу керек .ssh. Ол ID_RSA.Pub деп аталады. Бұл кілтті тауып, оны көшіріп алайық. Оны көру үшін,sudo touch /usr/bin/$1
sudo chmod a+x /usr/bin/$1
sudo nano /usr/bin/$1
CD ~
мысық .ssh / id_rsa.pubСоңғы пәрменмен қайтарылған мәтінді көшіріп, SSH пернесін өз шотыңызға қосар алдында, git провайдерімен (өте жақсы GitHub) тіркеліңіз. Есептік жазба болғаннан кейін, SSH пернесін SSH және GPG пернелеріне қосар алдында, мәзірге кіру астында SSH және GPG пернелеріне қосар алдында параметрлерді енгізіңіз. SSH кілтін қосу және оны қою арқылы қосып, оны қою арқылы қосыңыз және оған жаңа репозиторий жасау үшін Github-қа оралмас бұрын, оны бере беріңіз. Бұл басқа GIT провайдерлеріне ұқсас, сіз олардың құжаттарын оқуыңыз керек. Жаңа репозиторий конфигурациясында репозиторийге сипаттамалық атау беріңіз және оны жариялағыңыз келетін-келмейтінін шешіңіз және әлі де файлдарды қосу үшін конфигурацияламаңыз. Репозиторий жасалғаннан кейін клонды SSH URL мекен-жайымен көшіріп, келесі пәрменге қойыңыз.
get қашықтан басқару құралы: // ... (қашықтағы URL мекен-жайы)sudo ascript backup
Енді сіз репозиторийге CD-мен қайта оралуға болады, сіз бұған таныс боласыз. Сақтық көшірме сценарийін қазір сақтық көшірмені қолданып көріңізКеремет! Енді біз кодтауды шынымен ала аламыз. Бізде Джангоны енді, бізде жақсы ұста және гит бар деп орнатайық. Джанго бізге бағдарламалық жасақтаманы автоматты түрде сақтық көшірмесін жасайды, Баш бұны да жасай алады, бірақ Джанго қарапайым қауіпсіз жүзеге асыруы керек (оны өшіруге және оңай конфигурациялауға болады).
Ubuntu-да бағдарламалық жасақтаманы орнату үшін, біз Sudo APT-GET командасын қолданамыз. Біріншіден, бізде бұрыннан бар бағдарламалық жасақтаманы жаңартып, жаңартыңыз. Мұны Sudo Apt-get жаңартуымен және Sudo Apt-get жаңартуымен жасауға болады. Әрі қарай, біздің кодымыз бен виртуалды ортамызды, біздің кодтың үйін келесі пәрменмен орнатайық: Sudo apt-tak-reg ey-python3 python3-venvsudo cp /usr/bin/backup /path/to/directory/
sudo cp /usr/bin/ascript /path/to/directory/
Ubuntu данасында бағдарламалық жасақтаманы орнату тұрғысынан Django-мен бірге жүру керек. Windows және Linux үшін бұл қарапайым болуы керек, бірақ Mac үшін сіз Virtualbox немесе Paralells жұмыс үстелі сияқты еркін немесе ақылы виртуалды ортасын пайдаланып, виртуалды немесе Linux және Linux-ті орнатқыңыз келуі мүмкін. Ubuntu бұл жағдайда өте маңызды, өйткені ол бағдарламалық жасақтама, өйткені бұл веб-сайттар іске қосылады және ол оларға барлық жоғарыда аталған бағдарламалық жасақтамамен веб-сайттарды қабылдауға мүмкіндік береді.Джангоға кірейік.
Біздің каталогта, CD-мен:backup
Python -M vEnv venv # # коды сақталған виртуалды ортаны жасайды
VENV / BON / Activate # venv / bin / activate # виртуалды ошақтарды іске қосады
PIP орнату DJango
DJango-Admin StartProject MySite. # Миститтер - бұл менің қазіргі каталогымнан бастаймын.Код сақталған виртуалды ортаны жасайды
Виртуалды ортаны іске қосадыМенің қазіргі каталогымнан басталатын жоба қайда.
Джанго бізді енді ғана бастайды, өйткені Джанго веб-серверді қабылдайды және негізгі жергілікті веб-сайтты және жұмыс істеуі үшін қажет нәрсенің бәрін жасайды. Енді бізде DJango орнатылған болса, оны қалай қажет ету үшін параметрлерді біраз өңдейік. Алдымен, жаңа бағдарламаны жасайықPython.Py.py artap learap Feed
Алғашқы қолданбаны арна деп атайтынын байқайсыз. Қолданбаны сізге ұнайтын нәрсе деп атауға болады, және біз жаңа бағдарламалар жасаймыз, бірақ әр қолданба атауы қолданба кодта сілтеме жасалған сайын дәйекті болуы керек. Жаңа бағдарламаны қосу үшін, біз әрқашан Параметрлерді әрдайым өңдей аламыз, басқа каталогта, содан кейін «Бұрын» бағдарламасында. NANO көмегімен,nano app / settings.py
Параметрлерде орнатылған_APPS тауып, [] 3 жолға бөліңіз. Бос орталықта төрт кеңістікті қолдана отырып, «берілім» немесе қосымшаның атын қосыңыз. Параметрлердің бұл бөлімі мыналарға ұқсауы керек:# Орнатылған_apps = [
'fey',
]
Біз ұмытып кетпес бұрын, Дьянго жұмыс істейтінін тексерейік. Python Python.py.py.py.pr.prerver 0.0.0.0.0: 8000 пәрменін қолдана отырып, біз Серверді іске қосып, содан кейін Http: // localhost: 8000 (ол жұмыс істейді!) Кодты қараңыз (ол жұмыс істейді!) CONTER CONTER C, басқа пәрменмен бірдей.Енді бірнеше Python кодын жазайық. Джангоның үш негізгі компоненті бар, олардың барлығы кодпен толығымен орындалады. Компоненттер модель, қарау және шаблон деп аталады және олардың әрқайсысы пайдаланушыға жеткізілгенге дейін сәйкесінше жоғары және төменгі деңгейде.
Модель - бұл дерекқордағы ақпаратты іздеу, сұрыптау және көрсету үшін сақтайтын код.Көру модельдің көрсетілетінін, басқарылатынын, өзгертілгенін және өзгертілгенін шешеді, әр көрініс те модельді тікелей қолданады.
Шаблон - бұл бірнеше қосымша қоңыраулар мен ысқырықтар шаблон тілі бар HTML коды. Шаблон көріністен көрініспен көрсетіледі, онда ол пирон коды мен контексте, мысалы, модельдер мен ақпарат (Usuall Strings және бүтін сандар).cd /path/to/directory
git init
git branch -m master
ssh-keygen
Джангода басқа компоненттер бар, бірақ олармен шектелмейді:Бағдарламаны біз талқылағандай реттейтін параметрлер.
Пайдаланушы веб-қосымшаның белгілі бір бөліктеріне қол жеткізуді ұстанатын үлгілері болып табылатын URL мекенжайлары.cd ~
cat .ssh/id_rsa.pub
Серверге жіберілетін ақпараттың қалай өңделетінін және дерекқорға, сондай-ақ пайдаланушыға көрсетілетін нысандар. Бұл сервер жағындағы ақпаратты өңдеудің негізі болып табылады және компьютер дүкендерінде кез-келген ақпараттың түрін, мүмкін емес жолдарды, сандарды және шынайы / жалған / жалған логикалық (әдетте құсбелгілер) қабылдай алады.HTML коды және шаблондар, олар Python және HTML-дің тілдері және Python ақпаратының арасындағы шаблондар, егер Python ақпаратын WebN-ге кіре алатын және Python кодын WEB-ге қол жетімді ете алатын және серверге жақын болудың қажеті жоқ қашықтағы құрылғыға пайдалы ете алатын HTML коды ретінде бере аласыз.
Әдетте JavaScript және ол серверге қызмет ететін және шаблонмен байланыстырылған кітапханалар болып табылатын тұрақты файлдар.git remote add git://… (your remote URL)
Сервер қызмет ететін немесе сыртқы орналастырылған немесе өңделмес бұрын, басқа серверге (шелек) орналастырылған және орналастырылған медиа файлдары (шелек) хостингке жіберіледі.Орта бағдарлама, ол әр көзқараспен бір уақытта іске қосылатын және «қамтылған» деп саналады.
Әр көріністің мәтінмәнін өңдейтін және қосымша контекст қосу үшін қолданылатын мәтінмәндік процессорлар қолданылады.Пайдаланушының немесе сұраныстың көрінісі көрсетілгенге дейін белгілі бір талаптарды орындайтын тесттер.
Тұтынушылар, бұл WebSockets компаниясы қалай жұмыс істейтінін және қарым-қатынасқа қалай жауап беретінін анықтайды.SEND, ол модельдерді тіркеу үшін пайдаланылады, сондықтан оларды DJango Admin Page ішінде егжей-тегжейлі басқаруға болады, онда дерекқорды графикалық интерфейс арқылы енгізуге болады.
Асинхронды тапсырмаларды анықтайтын балдыркөк Django кодының бөліктері бірден келесі тапсырманы немесе код жолына дейін жұмыс істемеуі мүмкін.Джанго басқа да көптеген компоненттерге ие болуы мүмкін, оларды біз осы жерде егжей-тегжейлі талқылаймыз. Дджанго-гендерден көп мүмкіндіктер бар, олар тез, жетілдірілген байланыс арналары, асинхронды тапсырмалар, асинхронды тапсырмалар, әсіресе джангоны, әсіресе, кодтардың көп бөлігі орындалатынын және көптеген басқа бағдарламалық жасақтаманың көптеген басқа бағдарламаларымен айналысудың көптеген тәсілдері бар. Функциялар кілт болып табылады, өйткені олар әдетте белгілі бір URL үлгісіне немесе сервердің бөліміне қатысты барлық кодты жариялайды.
Алдымен, көріну функцияларын зерттейік. Функциялар Көріністе қолданылатын кодты белгілейтін импорттан басталады және тұрақты функция анықтамалары немесе сыныптарын пайдаланып анықталады. Қарапайым көріністер функцияның DEF функциясымен анықталады және HTTPrespsonse негізгі шаблонмен қайтарылады. «Сәлем әлем» мәтінін қайтару үшін негізгі көріністі анықтаудан бастайық. Есіңізде болсын, мәлімдемеден кейін, егер сіз DEF, егер болса, DEF, up, және т.с.с., егер сіз өзіңіздің функцияңызға қолданғыңыз келетін алдыңғы анықтамалардың әрқайсысы үшін 4 кеңістікті қосуыңыз керек. Жақында біз олардың әрқайсысының нені білдіреді.Біздің сайттың каталогынан «Nano көмегімен арна / көріністерді өңдеңіз және файлдың соңына келесі жолдарды қосыңыз.
DJango.Httphp-ден httpresponse def сәлем (сұрау): Return httpresponse («Сәлем Әлем»)DJango-дың HTTPResponse мәтіндік жолмен жауап береді, оның ашылуы мен жабылуымен байланысты. Функцияға немесе сыныпқа ақпарат берген сайын, сұраныс немесе жол сияқты, сіз жақшаны (, ашу және жабу) пайдалануыңыз керек.
Бұл біздің көзқарасымызды әлі көруіміз керек емес. Әрине, біз көрініс дәл осы жерде айтқан жоқпыз, бізге әлі күнге дейін көрініс көрсету керек жолды анықтау қажет. Бағдарламада / urls.py-де негізгі жолды анықтай отырып, бастайық және біз жолдан кейін топтық топтарға кіреміз.python -m venv venv # App / URLS.PY-де біз жасаған көріністі импорттағаннан кейін импорттау мәлімдемесінен кейін жол қосыңыз.
source venv/bin/activate # Арнаны импорттау көріністерінен Peicy_Views ретінде
django-admin startproject mysite . # Енді, көру үлгісін анықтайық. Көрініс үлгілерінде көрініс бар, ол серверде көрініс бар жерде, көрініс көрсетілетін жердегідей, көрініс компоненті және көрініс компоненті, әсіресе, шаблонмен жұмыс істеу үшін, әсіресе, егер ол басқа көзқарасқа арналған немесе логикалық атауды алу үшін оны өзгертуге болады. Бұл әрекетті жасау және икемді болудың мағынасы бар, өйткені сіздің кодтаңыз құнды және тиімді болу үшін икемділік пен импровизацияны қажет ететін өзгермелі орта болады. Міне, сіздің көзқарасыңыз қандай болады, оны URLPatterns = [App / URLS.PY бөліміне қосуға болады. Көрініс үлгісі жоғарыда сипатталған үш компоненттен анықталған, және жол деп аталатын функция. URL мекен-жайларыңыз тізім болып табылады, сондықтан әрқашан әр элементті үтірмен аяқтаңыз, себебі бұл әрқайсысын бөледі. Әр элемент сонымен қатар жаңа желіге, оған тағы бір рет, оған дейін төрт кеңістікпен, параметрлерде қолданылады. Веб-сервердің түбірлік каталогында жұмыс істейтін көріністі жасау үшін көріністің алғашқы компонентін бос жол функциясымен анықтаймыз. Сіздің URLS.PY енді келесідей болуы керек:
Арнаны импорттау көріністерінен Peicy_Views ретінде
UrlPatterns = [
жол ('', inge_views.hello, name = 'сәлем'),
]Бұл джанго бар веб-сайт құрудың негізі, ол толығымен статикалық. Біз ақпаратты, бейнелер, бейнелер, аудио және басқалар сияқты ақпаратты кэштеуді бастауға болатын динамикалық веб-сайт жасау үшін, біз келесі модельдерді қолдануымыз керек, оны біз зерттей аламыз. Әзірге, біздің кодты тексеріп, серверді іске қосайық. Қателер кодын тексеру үшін:
Python.py.python manage.py startapp feed
Егер сізде қате туралы хабарламалар болса, сіз өзіңіздің қолданбаңызға енгізілген өзгертулерді мұқият қарап шығыңыз және тұрақты немесе жоқ орын, қосымша таңба, жабық жол, кез-келген теру, кез-келген теру таңбасы немесе басқа кез-келген таңба бар-жоғын білгіңіз келеді. Қате туралы хабарлама арқылы оқу (егер сізде болса), сіз желі нөмірімен бірге жасаған немесе өңделген файлға жолды көре аласыз, сондықтан сол файл мен сызыққа қараңыз және сіз бар нәрсені жөндей аласыз ба? Егер сіз мәселені шешсеңіз, жоғарыдағы пәрменді қайтадан іске қосыңыз. Бағдарламалық жасақтама жұмыс істеуге дайын болған кезде, сіз жұмыс істеп жатқан кезде, сіз «жүйені тексеру» нәтижесін көресіз. Енді сіз баруға дайынсыз. Серверді келесі түрде іске қосыңыз:Python.py.py Runserver 0.0.0.0.0.0.0.0.0.0.0.0.07:8000
Енді веб-шолғышты ашып, http: // localhost: 8000 тармағына өтіңіз. Сіз өзіңіздің көрінісіңіздегі HTTPressonse функциясының жақшасы мен тырнақшаларында қайтарылған мәтінді көруіңіз керек. Бұл жай мысал, бірақ егер сіз оны осы уақытқа дейін жасасаңыз, Linux, Bash, Python және Django қалай жұмыс істейтінін түсінесіз. Кейбір мәліметтер базасын модельдеуге тереңдейік және ақпаратты сақтау кезінде Python класының қуатын зерттейік. Содан кейін біз өз сайтымызды толығымен ұсынбас бұрын, HTML және CSS-ке қол жеткізе бастаймыз, біз JavaScript және машинаны пайдалану арқылы икемді және қауіпсіз етіп жасаймыз.nano app/settings.py
Сабақтар сіздің бағдарламаңыздың тілінде сақталады. NANO көмегімен қолданып, қолданбаны / модельдерді өңдеңіз және жаңа сынып қосыңыз. Сынып сынып анықтамасымен анықталған және ол мұра-бұдан алынған суперкласс жіберіледі, бұл жағдайда models.model. Сыныптың атауы сынып анықтамасынан кейін келеді, ал сыныптың анықтамасынан кейін A: (қос нүкте) келесі сыныпқа байланған атрибуттар мен функциялар анықтамалары төменде көрсетілген. Біздің сыныпқа біз оны алу және оны бірегей етіп сақтау үшін пайдалана алатын идентификатор қажет, сонымен қатар кейбір ақпаратты сақтау үшін мәтіндік өріс қажет. Кейінірек біз Timestamp, файлдар, логикалық заттарды қосуға болады (шынайы немесе жалған анықтамалар), бұл біздің кодқа не істеуге болатындығы туралы шешім қабылдай алады және оны сұрыптауға болады және оны серверге байланыстырады, ал мысалы, серверге кірген пайдаланушыға және басқалар. Төмендегі кодты шығарайық:Django.db импорттау модельдерінен # біздің сыныпты анықтау үшін пайдаланылатын импорт және ол атрибуттар Сыныптан кейінгі (Models.model): # біздің сыныптың өзіне анықтама ID = models.autofield (b_Key = true) # Біздің модельдің идентификаторы, модельге жүгіну, ол бізге үлгіні сұрай аласыз, оны бірегей етіп сақтаңыз және ол модельмен жасалған кезде пайдалы болған кезде пайдалы болады. Text = models.textfield.textfield (әдепкі = '') # төлсипат Біздің сынып дүкендері, бұл жағдайда бос жолға да, әдепкі.
Біздің сыныпты анықтау үшін пайдаланылатын импорт және ол атрибуттарINSTALLED_APPS = [
'feed',
]
Біздің сыныптың анықтамасыБіздің модельдің идентификаторы, модельге жүгінуді, оны бірегей етіп, оны бірегей етіп сақтайды және ол модельмен жасалған кезде пайдалы болған кезде пайдалы болады.
Біздің сынып дүкендеріміз, бұл жағдайда, кейбір мәтін, бос жолға сәйкес келеді.Файлды біз аяқтамас бұрын жабыңыз және сақтаңыз.
Бізде осы сыныпты жаңартқан кезде біз зерттегенде, көптеген басқа өрістер мен опциялар бар, өйткені біз осы сыныпты жаңартқан кезде, бірақ бұл бірнеше мәтінді жариялау үшін қолданбаны құрудың негізгі қажеттілігі. Алайда, бұл модель жалғыз жұмыс істемейді. Бұрын сипатталғандай, бізге осы модель жасау үшін жеке көрініс және жеке URL үлгісі қажет, ал бізге сонымен қатар шаблонмен бірге форма қажет болады. Алдымен форманы зерттейік.Нысанды анықтау үшін қолданбаны / формаларды өңдеңіз. Nano-мен бірге. Бізге екі импорт, біздің формалар класы, сондай-ақ біз жасаған модель, сондай-ақ біз жасаған модель, модельге ұқсас сыныптың анықтамасы, ал кластағы анықтама, ал модельді анықтайтын мета-класы бар өріс. Нысанның сонымен қатар оны сұрау, модельдегі немесе басқаша ақпарат негізінде орнататын инициализация функциясы болуы мүмкін, бұл туралы біз мұны кейінірек зерттейміз.
Үлгі формалары соншалықты пайдалы, өйткені олар модель жасай алады немесе модельді де өңдей алады, сондықтан біз оларды екеуіне де қолданамыз. Төмендегі формада бірін анықтайық.Django импорттау формаларынан FEED.models импорттау қызметінен Сыныптан кейінгі (Forms.modelform): Text = Forms.Charfield (Виджет = Forms.textArea) Сынып мета: Модель = хабарлама Өрістер = ('Мәтін',)
Бұл форма мен модельдің негіздері болып табылады. Бұл модель формасын POST-ті іске қосу немесе өңдеу үшін қолдануға болады, ол бар мәтінді өзгертеді. Біз келесі форманы келесі көрініске біріктіруге қараймыз. Алдымен, біздің кодымыз модельмен жұмыс істеп тұрған кезде, миграцияны жасап, дерекқорды тасымалдайық. Ол үшін келесі пәрмендерді іске қосыңыз:Python.py.py Makemigrations Python.py.py
Бұл орындалуға бір минут кетеді, бірақ ол жасағаннан кейін, ол сізге үлгі, ортақ бұйымдардағы немесе бағдарламалық жасақтамадағы басқа жерде қол жеткізуге мүмкіндік береді. Біздің модельді қайдан көре алатынымызды жалғастырайық. Арнаны / көріністерді өңдеңіз және атап өткендей, келесі кодты қосыңыз. # Белгіден кейін сізге ештеңе қосудың қажеті жоқ, бұл код - код туралы ақпаратты көрсету үшін пайдаланылатын пікірлер. Біз модельді көріністерге импорттау және оны көрсету үшін оны концессияға қосудан бастаймыз. Әрі қарай, біз модельге негізделген жаңа нысанды жасау және оны серверге жариялау үшін пішінді және модельді түймені көрсете алатын шаблон қосамыз. Бұл өте қиын, сондықтан оны қадаммен қабылдайық. Көріністі аяқтамас бұрын, тек модельді ұсынатын үлгіні жасайық және оны қабықшада жаңа хабарлама жасау арқылы көре берейік. Міне, бұл көзқарас келесі көрінуі керек:FEED.models импорттау қызметінен Django.Shortcuts-тен импорттау, қайта бағыттау Django.urls-тен импорттау кері Def Feed (сұрау): Хабарламалар = Пост.Объектілер.all () # Дерекқордағы барлық хабарламалар осы уақытқа дейін қайтару Renter (сұрау, «арна / арна.html», { «Хабарламалар»: хабарламалар, })
Осы уақытқа дейін мәліметтер базасындағы барлық хабарламаларБіз түбіне дейін өте қарапайым көрінеді. Алдыңғы мысал сияқты, HTTP жауабының орнына функция қайтарған мән, әрқашан сұрау алады, оны бірінші енгізу ретінде алады, оны шаблонда көрсете алады және оны шаблонда көрсете алады және функцияда анықталған шаблонды қайтарады. Шаблон HTML-ді HTML деп аталатын HTML құжаты болып табылады, ол HTML-ге Python ақпаратын ұсынады.
Шаблондар құруды бастау үшін, екі каталогты тамақтандырыңыз.MKDIR FEENT / Шаблондар MKDIR FEENT / Шаблондар / жем
Әрі қарай, жоғарыдағы каталогта үлгіні өңдеңіз, арнаңыз / шаблондар / арна және осы мысал үшін кодты қосыңыз. Осы мысал үшін шаблонды қарастырайық.Тамақтану {% post (хабарламалар үшін%} {{post.text}} {% ENDFOR%}
Бұл өте қарапайым шаблон. Ол HTML тегтерін ашу және жабуды анықтайды, құжат түрі тегі, мәтіндік тег, аңыздары бар дене тег, экранның үстінде кішкене сызық қосатын үзіліс белгісі және A үшін A үшін A және A үшін A үшін And Posts, мысалы, шаблондағы абзацтағы тармақ түрінде. Бұл хабарламаларды көрсету үшін қажет, бірақ әлі дерекқорда жоқ. Қабыршағымен бірнеше жасайық. Біз Shell-ді басқару арқылы жүгіре аламызPython.py Shell басқарады
Енді біздің пост моделімізді импорттайықFEED.models импорттау қызметінен
Әрі қарай, біз қарапайым постты жолмен жасаймыз және қабықтан шығамыз. Жол кез-келген нәрсе болуы мүмкін, бұл дұрыс мәтін.Post.Objects.Create (Text = 'Hello World') Шығу ()
Әрине, бізге өз жемшілігімізге URL үлгісін қосу қажет болады. Біздің арна қолданбасы бірнеше URL мекен-жайларын пайдаланады және біз файл өлшемдерін аз сақтағымыз келеді, біз келесідей, жергілікті URL мекенжайын жасайық:DJango.urls-тен импорттау жолынан бастап. Импорт көріністері UrlPatterns = [ жол ('', views.feed, name = 'fey'), ]
Сондай-ақ, URL мекен-жайларын негізгі қолданбада өңдеуіміз керек, біз оны шақыруға шешім қабылдадық, бұл біз жасаған алғашқы каталог болды. App / App.py бағдарламасын өңдеңіз және URL үлгілеріне мынаны қосыңызDjango.urls-тен импорттан # жоғарғы жағында # UrlPatterns = [ # ... алдыңғы код Жол ('Беру /', кіреді ('fing.urls'), аттар кеңістігі = 'Беру'), ]
жоғарғы жағында... Алдыңғы код осында
Енді, біз Python over.py.py-ді Python.Py Runserver-мен жұмыс істеген кезде, біз жасаған бетті көреміз, өйткені бізде модель, қарау және шаблон, сонымен қатар URL мекен-жайы, сонымен қатар дерекқордағы элементтер бар. Әрі қарай, біз жасаған форманы іске асырайық және өз жазбаларымызды жасай бастайық. Бірақ біз тым көп код жазбас бұрын, біз жазған, біз бұрын жазған сценарийді пайдаланып, резервтік көшірме жасаңыз. Осы сценарийді сценарийді снарядты іске қосыңыз, бірнеше минут күтіңіз, және барлық код біздің GIT репозиторийіне сәйкес келеді.сақтық көшірме
Пішінді енгізу салыстырмалы түрде қарапайым. Біз формамызды импорттаймыз, көрініске орналастырыңыз және сол көріністі қайта бағыттай алмас бұрын, Пошта сұрау өңдегішін қосамыз және дерекқордағы жазбаны сақтаймыз. Біз бұрын импортталған Redierrect функциясын қолдана аламыз, ал басқа функция url көрініс үлгісіне URL мекенжайын алу үшін кері деп аталады. Біз мұны «Арнайы: арна» жолымен сұраймыз, өйткені берілген үлгідегі аттар кеңістігі берілмейді, ал көрініс сонымен қатар арна деп те аталады.Feed.Forms-тен постьформадан кейінгі Def Feed (сұрау): Хабарламалар = Пост.Объектілер.all () # Дерекқордағы барлық хабарламалар осы уақытқа дейін Егер сұраныс.method == «Хабарлама»: # Тапсырманы орындау Пішін = ost mostordm (сұрау.post) # Пішіннің данасын жасаңыз және оған деректерді сақтаңыз Егер form.is_valid (): # форманы растаңыз Форма.Са () # Жаңа нысанды сақтаңыз Қайтар- Қайта бағыттау (кері ('Артқы беру: арна: арна')) # сұранысы бар бірдей URL мекен-жайына қайта бағыттаңыз қайтару Renter (сұрау, «арна / арна.html», { 'print': ostem (), off (), # форманы контекстке беру, сондықтан біз оны көрсете аламыз. «Хабарламалар»: хабарламалар, })
Осы уақытқа дейін мәліметтер базасындағы барлық хабарламаларПошта сұрауын өңдеңіз
Нысанның данасын жасаңыз және деректерді оған сақтаңызПішінді тексеріңіз
Жаңа нысанды сақтаңызСұраныс алу арқылы бірдей URL-ге қайта бағыттаңыз
Нысанды контекстке беру үшін, сондықтан біз оны көрсете аламыз.HTML-дегі тег және пішінді Жіберу түймесі бар HTML үлгісінде көрсету. Сондай-ақ, бізге CSRF Token, Token қажет, ол сыртқы сайттарды бетті бірінші жүктелместен пішінге жіберуге жол бермейді.
Тамақтану {% csrf_token%} {{pland}} Жаңа хабарлама {% post (хабарламалар үшін%} {{post.text}} {% ENDFOR%}from django.http import HttpResponse
def hello(request):
return HttpResponse('hello world')
Мұны бұзайық. Жаңа форма сыныбы, таңбалауыш, пішіннің өзі және Жіберу батырмасы бар. Әдемі қарапайым, бірақ біз оған қарасақ, оны жақсырақ етіп жасағымыз келуі мүмкін. Ол жұмыс істейді, біз жаңа хабарламаларды пішінмен орналастыра аламыз және олар қазір дерекқорда сақталады. Мұнда бірнеше нәрсе бар. Біз HTML тегтерін құжатта HTML құжаты болса, біз пішінге арналған таңбалауышты ({% ...%}) қолданамыз, ал пішінді көрсету үшін шаблон тегін ({% ...%}) қолданамыз, ал форманы көрсету үшін басқа, {{...}}. Сондай-ақ, бізде мәтінді блок тегтері мен шаблон тегінің көмегімен көрсету үшін цикл бар. Блоктау тегтері өте маңызды, өйткені біз шаблонның бөлімдерінің олармен қалай көрсетілетінін анықтай аламыз, ал шаблон тегтері біздің кодқа айнымалы мәндерді қалай түсіретініміздің негізі болып табылады.Енді біз өз қолданбамызды жақсырақ етуіміз керек, өйткені қазір ол шынымен қарапайым көрінеді. Біз мұны CSS, кірістірілген немесе құжаттағы әр объекке байланған сабақтар арқылы жасай аламыз. CSS шынымен жақсы, өйткені ол бетте бәрін қалай қарау керектігін айтады және оны өте жақсы етеді. Мұны жасай алатын бірнеше кітапханалар бар, бірақ менің жеке барамын - бұл жүктеу.
GetBootstrap.com/Mkdir шаблондары бар шаблондар деп аталатын жаңа каталог жасаңыз, содан кейін шаблондарды / base.html өңдеңіз.
Ол келесідей болуы керек:{% блоктау денесі%} {% EndBlock%}
CSS және JavaScript,from feed import views as feed_views
Енді, Баш қабығына оралып, тез командасын іске қосайық. Есіңізде болсын, егер сіз виртуалды ортаға кіруіңіз керек болса, Venv / Bin / Activate көзін теріңіз. Бұл сізге Python Packages-ті жергілікті жерде, Django-ға кіруге мүмкіндік береді. DJango Bootstrap сыныптары құрған формаларымызды беру үшін біз қытырлақ пішіндер деп аталатын пирон пакетін қолданамыз. Мұны келесі пәрменмен жүктей аламызDJango-қытырлақ формаларын орнату
Бұл орнатылғаннан кейін, оны параметрлерге қосыңызfrom feed import views as feed_views
urlpatterns = [
path('', feed_views.hello, name='hello'),
]
Орнатылған_apps = [
# ... алдыңғы код
«Қытырлақ_формалар»,
]... Алдыңғы код осында
Енді, біздің арна шаблонымызға оралсақ, біз кейбір нәрселерді алып тастай аламыз. Құжаттың басталуы мен соңын алып, оны мұрагерлікпен алмастырайық және оны негізгі шаблоннан алмастырайық, кеңейтілген және блоктың анықтамасын пайдаланып. Сондай-ақ, біз пішінге жүктеме және шаблон сүзгісі бар шаблон сүзгісін импорттаймыз. Соңында, оны батырмаға батырма сияқты етіп жасау үшін жүктеу класын қосып берейік. Бұл келесідей болуы керек:python manage.py check
{% extse.html '%} қолданылады
{% блоктау денесі%}
{% Жүктеме Crespy_forms_tags%}
{% csrf_token%}
{{class | қытырлақ}}
Жаңа хабарлама
{% post (хабарламалар үшін%}
{{post.text}}
{% ENDFOR%}
{% EndBlock%}Әдемі! Бұл өте жақсы код. Әрі қарай, біз оны сынап көруіміз керек және бәрінің жақсы көрінетінін және бәрінің дұрыс жұмыс істегеніне көз жеткізіңіз. Серверді алдыңғы нұсқаулар бойынша іске қосыңыз және сайттың көрінетініне көз жеткізіңіз және жақсы. Керемет жұмыс! Сіз келесі қадамға өтуге дайынсыз, онда біз ұқсас URL мекенжайларын, формалар, көріністер мен шаблондар арқылы пайдаланушыға кіру функциясын қосамыз. Негізгі шаблон маңызды, сондықтан біз оны өзгертіп, қажет болған жағдайда өзгерістер енгіземіз, бірақ қазір пайдаланушыларға пайдаланушы аты мен құпия кодпен кіре береміз, ал қолданбаңыздың қауіпсіздігін және жеке шотыңызды тек өзіңіз қол жетімді ете аласыз.
Мұны істеу үшін біз DJango-ға салынған пайдаланушы үлгісін пайдалануымыз керек. Пайдаланушы үлгісі - бұл біздің пошта моделі, мысалы, біздің пошта моделі, мысалы, веб-сайтқа кіруге болады. Болашақта, біз сайтты Интернетке орналастырмас бұрын, біз бұл модельді оған қатысты басқа модельдермен кеңейтеміз және фишингке төзімді логинге қосымша қауіпсіздік шараларын саламыз. Біз DJango ұсынатын логиндердегі кейбір салынған кейбір заттарды қолдана отырып бастаймыз. Алдымен, біз жаңа қосымшаны жасайық, біз негізгі кіру парағына шаблондар мен көріністерді көрсету үшін пайдаланамыз. Сондай-ақ, біз қосымшаны, оның ішінде пинкон, бетті тану, сыртқы құрылғылардың жанында, сыртқы құрылғылардың, көп факторлардың аутентификациясын және саусақ ізін тану үшін басқа қосымшаларды ұсынамыз.python manage.py runserver 0.0.0.0:8000
Біз қолданбаны бастау туралы сөйлескен едік. Біздің каталогтан, виртуалды ортада, осы дәлелдерді басқарыңызPython.py.py ardapp пайдаланушылары
Енді бізде жаңа бағдарламаның каталогы болуы керек. Пайдаланушы логиніне сәйкес келетін осы каталогта көріністі жасаудан бастайық. DJango пайдаланушылар логиндеріне арналған кандидаттарда тұрғызылған, бірақ олар бізге жарамайды, өйткені бізге жеке көрініс қажет, бұл анықтамамен жасалады.Бұл көріністе біз пост-сұранымды тексеруден бастаймыз, сұраныс жіберуден бастаймыз.
Пайдаланушыларда / көріністерде келесі кодты қосыңызfrom django.db import models # Django.Shortcuts-тен импорттау, қайта бағыттау
Django.urls-тен импорттау кері
django.contrib.auth.Forms-тен аутентификацияның аутентификациясы, SetPasswordForm
Django.contrib.auth Import Аутентификация, шығу
Django.contrib.Auth импорттаушыдан Auth_login ретінде кіру
Django.contrib-тен импорттау туралы хабарламалар
Def Login (Сұраныс):
Егер сұрау.method == «ПОСТ»:
username = Тапсырыс.post ['Пайдаланушы аты'] # Өтініштен жасалған сұраудан логин мен парольді алыңыз
Құпия сөз = сұрау.post ['Құпия сөз'] # түпнұсқалық растама
Пайдаланушы = Аутентификация (пайдаланушы аты = пайдаланушы аты, пароль = пароль)
Егер пайдаланушы:
auth_login (сұрау, пайдаланушы, contend = 'django.contrib.auth.modelbands.modelbackend')
messages.Success (сұрау, 'пароль қабылданды. Өтінемін, жалғастырыңыз')
Қайтару (кері ('Арнайы: арна'))
Басқа: хабарламалар.
Return Render (сұрау, 'пайдаланушылар / кіру.html', {'print': аутентификация нысаны ()})
class Post(models.Model): # Пайдаланушы аты мен парольді хабарлама сұранысынан алыңыз
id = models.AutoField(primary_key=True) # Пайдаланушының түпнұсқалығын растау
text = models.TextField(default='') # Бұл сізге негізгі кіру үшін қажет. Енді негізгі шаблонды кеңейту арқылы көрініс үшін форма жасайық. Пайдаланушылар қалтасында шаблондар үшін жаңа каталог құрудан бастаймыз.
MKDir пайдаланушылары / шаблондар
MKDir пайдаланушылары / шаблондар / пайдаланушыларЕнді біз пайдаланушыларды / шаблондарды / пайдаланушыларды / пайдаланушыларды / login.html бағдарламасын өңдей аламыз. Бізде болғанда, біз пайдаланушының тіркелуге мүмкіндік беретін шаблонды жасаймыз.
Nano пайдаланушылары / шаблондар / пайдаланушылар / Login.htmlЕнді, шаблонда,
{% extse.html '%} қолданылады {% Жүктеме Crespy_forms_tags%} {% блокталған мазмұн%} {% csrf_token%} Кіру {{class | қытырлақ}} Кіру {% EndBlock%}Бұл кіру шаблонының негіздері. Бұл шынымен құрылымдағы басқа шаблон сияқты, бірақ ол көрсетілген кезде аздап өзгеше көрінеді. Біз осы кодты көшіре аламыз, онда біз реактивті.html деп аталатын басқа ұқсас шаблон құру үшін, онда біз тұжырымдаманы өзгертеміз және біз құрастыратын жаңа форманы қолданамыз. Алдымен шаблонды жасайық. Пайдаланушыларды / шаблондарды / пайдаланушыларды / register.htmlды өңдеңіз және келесі кодты қосыңыз:
{% extse.html '%} қолданылады {% Жүктеме Crespy_forms_tags%} {% блокталған мазмұн%} {% csrf_token%} Аккаунты құру {{class | қытырлақ}} Тіркеу {% EndBlock%}Енді, біздің пайдаланушыларды тіркеу үшін форманы құрайық және модельмен пайдаланушылар логиндерін жаңартпас бұрын, біз көріністерге оралайық. Біз бұл форманы бастауға негізделетін етіп жасаймыз, бірақ болашақта келісімдер және CAPTCHA сияқты қосымша мәліметтер мен қауіпсіздік мүмкіндіктерін енгіземіз. Нано пайдаланушылары / Forms.PY-мен формаларды өңдеңіз және келесі кодты қосыңыз.
Django импорттау формаларынан django.contrib.auth.models пайдаланушыны импорттау Django.contrib.auth.Forms offersChireCiateForm импорттау Class UserRegisterForm (UserCreiCiateForm) Электрондық пошта = Forms.emailfield () Сынып мета: Модель = пайдаланушы Өрістер = ['Пайдаланушы аты', 'email', 'Password1', 'Password2']from django import forms
from feed.models import Post
class PostForm(forms.ModelForm):
text = forms.CharField(widget=forms.Textarea)
class Meta:
model = Post
fields = ('text',)
Сондықтан бізде басқа формада бар, ол жай ғана жұмыс істейді. Бұл пайдаланушы тіркеу формасы, пайдаланушы аты, электрондық пошта және пароль, сонымен қатар растау парағы өрісі. Бұл форма тұрақты формалармен бірдей болмайды. Бір өріс дәл солай анықталған, ал сынып мета үлгіні анықтайды, ал нысанды пішінді анықтайды. Мұның көп бөлігі Джангоның in UsercriateForm-да орнатылған, сондықтан біз мұны сыныптың негізі ретінде қолданамыз (жақшада өткен).Әрі қарай, біз пайдаланушыны тіркеу үшін, қазір пішінді және шаблон бар екенін тексереміз. Бұл модельформ, жаңа посттардағы сияқты. Пайдаланушыларды / көріністерді өңдеңіз және келесі кодты қосыңыз:
# ... Импорт .Forms-тен UserRegisterForm импорты DEF ТІРКЕУ (Сұраныс): Егер сұрау.method == «ПОСТ»: Пішін = USERREGATERFORM (сұрау.post) Егер форма.is_valid (): Пайдаланушы = Form.SAVE () messages.Success (сұраныс, 'Бағдарламаға қош келдіңіз, {}.'. пішімдеу (user.username)) Return Render (сұрау, 'пайдаланушылар / register.html', {'plange': usergisterform})python manage.py makemigrations
python manage.py migrate
... ИмпортБізге пайдаланушы тіркелгеніміз керек, бірақ бізде қосымша ақпарат болуы керек. Біз пайдаланушының тіркелген уақытын білгіміз келеді, олар туралы бірнеше рет, олар туралы, олар туралы кейбір мәліметтер, уақыт белдеуі және т.б. сияқты, бізге белгілі бір ақпарат, POST, POST, POST, POST, әр пайдаланушыға арналған және атрибут жазбаларын есепке алу керек. Мұны істеу үшін біз екі бағдарламада да модельдерді жаңартамыз. Беру үлгісін өңдеуден бастайық. Ол қазірге ұқсауы керек:
Django.db импорттау модельдерінен # ... Импорт django.contrib.auth.models пайдаланушыны импорттау Сыныптан кейінгі (модельдер.model): id = models.autofield (b_Key = true) Автор = Модельдер text = models.textfield (әдепкі = '') posts = Post.objects.all() # ... Импорт
Осы жолға қосыңызФайлға қосылатын екінші жолға назар аударыңыз. Бұл әр хабарлама үшін әр хабарламаны төлейтін сыртқы кілт, ол әр хабарлама үшін әр хабарламады төлейді, сондықтан біз пайдаланушыға пользователядық негізде сақтаймыз және оны пайдаланушыны төлей алмайтын постты жасамайтынымызға көз жеткізе аламыз. Біз осы сыртқы кілтті өзіміздің сандарымен, жостармен, NULL және бос дәлелдермен анықтаймыз, қажет болса, пайдаланушыларды алып тастау үшін, біз пайдаланушыны алып тастап, біз жасаған, пайдаланушының жұмыс істеуі үшін және біз пайдалана алатын байланысты атауды, пайдаланушы жасайды. Осыған байланысты атау, посттың авторы, лауазымынан айырмашылығы, посттың авторы бізге посттың өзіне орналастырған пайдаланушы береді. Енді біз User.posts.all () немесе Автор.All () немесе Автор.All () жұмыс істеген пайдаланушыны ала аламыз.
Енді, логиндерімізді ақталуға мәжбүр етейік. Біз өз сайтымызды фишингке әлдеқайда аз фишингке азайта аламыз, бұл сайтқа кірудің санын шектеу арқылы біз жай ғана жеңілдік жасай аламыз, бұл өте оңай. Сондай-ақ, қолданбаны әзірлеуді жалғастырғанға дейін әр пайдаланушы туралы кейбір ақпаратты сақтайық. Пайдаланушыларды / модельдерді өңдеуді өңдеу, келесі кодты қосыңыз.DJango.DB импорттау модельдерінен django.contrib.auth.models пайдаланушыны импорттау DJango.Utils-тен TimeZone импорты Сабақ профилі (Models.model): Пайдаланушы = models.onetoonefield (пайдаланушы, on_delete = models.cascade, null = true, blasth = true, play_name = 'Профиль') есептік жазба_көрме = models.datetimefield (әдепкі = timezone.now) Last_seen = models.dateTimeField (әдепкі = timezone.now) can_login = models.dateTimefield (әдепкі = timezone.now) modeld_name = models.Charfield (max_length = 20, default = '' ', null = true, bast = true) Bio = models.textfield (бос = True, Default = '')
Бұл модель пошта моделіне сәйкес келетіндігін ескеріңіз. Бізде қосымша импорт бар, TimeZone, ол бізге DateTime өрістерінде әдепкі параметрлерді орнатуға мүмкіндік береді, сонымен қатар бізде Post сияқты таңба және мәтіндік далалар бар. Осы уақыт белгілерінің барлығын пайдалану сайтты қорғауға және оның қолданылуын түсінуге көмектеседі, ал мәтіндік өрістер бізге әр пайдаланушы туралы немесе автор туралы ақпарат беруге мүмкіндік береді. OneToonefield-тің ұсақ-түйек болуы керек, ол жалғыз басты мәселе, бірақ тек бір ғана модельмен бірдей. Осылайша, пайдаланушының тек бір профиль бар, ал оларда көптеген хабарламалар болуы мүмкін.mkdir feed/templates
mkdir feed/templates/feed
Енді логинді жақсартып, профильді есепке алу үшін көріністерді тіркейік. Біріншіден, пайдаланушыларды / көріністерді өңдеңіз және регистрді қарауға назар аударыңыз:# ... Импорт .Forms-тен UserRegisterForm импорты DEF ТІРКЕУ (Сұраныс): Егер сұрау.method == «ПОСТ»: Пішін = USERREGATERFORM (сұрау.post) Егер форма.is_valid (): Пайдаланушы = Form.SAVE () Profile.objects.Create (user = Пайдаланушы) # Пайдаланушы үшін профиль жасау үшін осы жолды қосқаныңызға көз жеткізіңіз messages.Success (сұраныс, 'Бағдарламаға қош келдіңіз, {}.'. пішімдеу (user.username)) Return Render (сұрау, 'пайдаланушылар / register.html', {'plange': usergisterform})
... Импорт
Пайдаланушы үшін профиль жасау үшін осы жолды қосқаныңызға көз жеткізіңізБұл кез-келген ақпаратты толтырмай, пайдаланушы үшін профиль жасайды. Енді біз пайдаланушының тіркелгісіне жиі кіру мүмкін емес екеніне көз жеткізгіміз келеді немесе кем дегенде, құпия сөздерді жиі қарау мүмкін емес, сондықтан кіру көрінісін жаңартыңыз.
# ... Импорт .Models импорттау профилінен DJango.Utils-тен TimeZone импорты Деректерді импорттау Def Login (Сұраныс): Егер сұрау.method == «ПОСТ»: Пайдаланушы аты = сұрау.post ['Пайдаланушы аты'] Пароль = сұрау.post ['Құпия сөз'] Пайдаланушы = Аутентификация (пайдаланушы аты = пайдаланушы аты, пароль = пароль) Егер пайдаланушы және user.profile.profile.can_login <timezone.now () (): # Енді біз қазір пайдаланушының кіре алатындығын тексеріңіз auth_login (сұрау, пайдаланушы, contend = 'django.contrib.auth.modelbands.modelbackend') messists.Success (сұрау, 'пароль қабылданды. Өтінемін, жалғастырыңыз.') Қайтару (кері ('Арнайы: арна')) Басқа: # Егер логин сәтті болмаса, Хабарламалар. Жаңарту (сұрау, 'пайдаланушы аты немесе пароль дұрыс емес. Қайталап көріңіз.') Пайдаланушы = user.objects.filter (username = Пайдаланушы аты) .First () # Бұл пайдаланушыларға арналған профильді жаңартатын бөлік Егер пайдаланушы: Профиль = Пайдаланушы.profile profile.can_login = TimeZone.now () + datetime.timedelta (секунд = 15) #, сондықтан олар бірнеше секундқа қайта кіре алмайды Профиль.SAVE () Return Render (сұрау, 'пайдаланушылар / кіру.html', {'print': аутентификация нысаны ()})python manage.py shell
... ИмпортЕнді пайдаланушының кіре алатындығын тексеріңіз
Егер кіру сәтсіз болса,from feed.models import Post
Бұл пайдаланушылардың профилін жаңартатын бөлігіСондықтан олар бірнеше секундқа қайта кіре алмайды
Бұл қауіпсіздіктің негізгі негізі. Сайттың біреуге барлық мүмкін болатын комбинацияны, тіпті бір уақытта да, тіпті бірнешеуі осал екеніне көз жеткізіңіз. Бұл олардың құпия кодын білетін және бірнеше құрылғыларға кіретін қарапайым пайдаланушыға ренжімейді, бірақ ол қолданбадан көптеген фишинг роботтарын сақтайды. Егер біз өзгермелі, Can_login-мен, ол бұрынғы уақыт болуы керек және оны бірдей пайдаланушы атын қолданып, әр сәтсіз кіру арқылы жаңартыңыз. Осылайша, зиянды қолданушы парольді кез-келген жерде тез арада біле алмайды. DateTime.timedelta () секундтарының санын жаңартуға болады, ал веб-сайт әлдеқайда икемді болады, бірақ одан да көп уақыт өте аз болады. Мен 15 бастауды ұсынамын.Post.objects.create(text='hello world')
exit()
Есіңізде болсын, біз жұмысымызды сақтау үшін сақтық көшірме сценарийін салғанбыз, сондықтан біз әлі күнге дейін сақтап, бізде барлығын сақтап қалғанымызға көз жеткізу үшін сақтықпен қараймыз. Пәрменді іске қосыңыз:Судо сақтық көшірмесі
Тағы бір рет, бұл сіздің жұмысыңызды әлі күнге дейін сақтайды. Мен жұмысты үнемдеу үшін жиі сақтық көшірмелерді іске қосуды ұсынамын, тіпті сақтық көшірме тапсырмасын автоматты түрде іске қосқыңыз келуі мүмкін. Сіз мұны CRON деп аталатын Unix утилитасын пайдаланып жасай аласыз. Бұл қызметтік бағдарламаны іске қосу үшін келесі пәрменді іске қосыңыз және құпия сөзді енгізіңіз:from django.urls import path
from . import views
urlpatterns = [
path('', views.feed, name='feed'),
]
sudo crontab -eЕгер сіз Nano үшін 1-опцияны таңдаған болсаңыз, мәтіндік редактор, сіз бұрыннан таныс болуыңыз керек және көрсеткі пернелердің көмегімен файлдың төменгі жағына айналдырыңыз. Келесі жолды қосыңыз:
0 * * * * sudo резервтік көшірмесіfrom django.urls import include # CRON форматын, ай, ай, ай, аптаның күнін, аптаның күнін, мұндағы * немесе сан пәрменді қашан орындау керектігін білдіреді. Минут үшін 0 және * Қалған параметрлер үшін біз қалған параметрлер үшін, біз әр сағаттың бірінші минутында бір минут ішінде жұмыс істей аламыз. Бұл бізге кодты автоматты түрде сақтық көшірмеленуге мүмкіндік береді. Судодан жасалған барлық кронның жұмысы түбір ретінде орындалады, сондықтан біз сағат сайын парольді терудің қажеті жоқ.
# Құпия сөзді пайдаланбай біздің кодтың сақтық көшірмесін жасауды жеңілдету үшін, біздің сақтық көшірме жасау пәрмені үшін құпия сөзді өшіре аласық. Біз мұны келесі пәрменді орындау және пароль енгізу арқылы жасаймыз:
Судо висудоЕнді, файлдың төменгі жағына жылжып, басқа жол қосыңыз:
Барлығы = nopasswd: / bin / backupbackup
Бұл бізге «Сақтық көшірме» командасын кез-келген пайдаланушы ретінде, парольсіз іске қосуға мүмкіндік береді. Бұл үшін пішім оңай, жай ғана «барлығы = nopasswd: / bin /» көмегімен сызықты префиксті префиксті префикстеу және пәрменмен аяқтаңыз, мысалы / bin / bin / bin / bin / backup.Енді, электрондық поштамен жұмыс істей бастайық. Электрондық пошта веб-сайттар үшін өте маңызды, өйткені бұл веб-сайтты қауіпсіз ұстаудың әдісі, ал пайдаланушылар - нақты адамдар, тіпті тұтынушыларға нарықтық өнімдер немесе қызметтерді де тексеріңіз. Интернетті жиі тексеретін көптеген адамдар өздерінің электрондық пошталарын тексеріп, өнімдер мен қызметтер туралы маркетингтің барлық түрлерін алады. Электрондық поштаны DJango веб-сайтында қосу үшін бірнеше нұсқалар бар және сіз үшін қайсысы сізге жақсы жұмыс істейтіндігіңізге қош келдіңіз.
Алдымен, сіз өзіңіздің доменіңізден электрондық поштаны жіберуге мүмкіндік беретін және минималды кодты қажет ететін электрондық пошта қызметі үшін төлей аласыз. Google Workspace, Sentinblue, MailGun және басқалар сияқты көптеген қызметтер бар. posts = Post.objects.all() # Әйтпесе, сіз өзіңіздің серверіңізде өзіңіздің электрондық пошта қызметін нөлден бастаңыз. Мен бұл опцияны ұсынамын, бұл қосымша код болса да, арнайы хостингті қажет етуі мүмкін. Сіз өзіңіздің үй компьютеріңізден пошта серверін бастай алмайсыз, сондықтан бұлтта серверде серверді іске қоспас бұрын электрондық поштаны жіберуге және электрондық поштаны жіберу үшін конфигурация мен кодты тексеріп, конфигурацияны және кодты қарап шығыңыз.
if request.method == 'POST': # Алдымен, параметрлерді келесі пәрменмен өңдеңіз:
form = PostForm(request.POST) # nano app / settings.py
if form.is_valid(): # Егер сіз App USTAPP жасаған бағдарламаның атауы болған кезде.
form.save() # Келесі жолдарды қосыңыз:
return redirect(reverse('feed:feed')) # Site_name = 'Django App'
Email_backend = 'django.core.mail.mail.ackends.smtp.emalebackend'
Email_host = 'localhost'
Email_port = 587
Email_use_tls = шын
Email_address = username@server.com '
Email_host_user = 'Пайдаланушы аты'
Email_host_password = config ['email_host_password']
Default_from_email = '{} <{}>'. Пішімдеу (Сайт_NAME, email_host_User)
'form': PostForm(), # Мұны өзгертіңіз. Бағдарламаны қолдануға дайын болған кезде, біз мұны кейінірек қайта қараймыз. Электрондық пошта_адиресс параметрі сіз жібергіңіз келетін электрондық пошта болуы керек, ал пароль (email_host_password) сервер үшін жасалған құпия сөзге қойылуы керек. Мен құпия сөзді Config файлынан келесі логиканы пайдаланып, келесі логиканы пайдаланып, осы сызықтардың үстінен салыңыз.
ОС импорттаңыз
JSON импорт
Ашумен ('/ etc / config.json') config_file ретінде:
config = json.Load (config_file)Содан кейін мен Nano көмегімен in nandc/config.json ішіндегі JSON файлын орнатқанмын.
sudo nano /etc/config.json
Келесі жолдарды қосыңыз:{ «Электрондық пошта_хост_Password»: «» }
Біз конфигурация файлын өңдеуді және қолданбада қолданатын барлық парольдер мен кілттерді қосуды жалғастырамыз. Әзірге Python көмегімен электрондық поштаны қалай жіберу керектігін тез тексерейік. Алдымен, біз пайдаланушыларға жібере алатын электрондық пошта үшін шаблонды жасайық және оны пайдаланушылар шаблондар каталогына салыңыз. Бұл шаблон HTML-де жазылады.Nano пайдаланушылары / шаблондары / пайдаланушылар / meneral_email.html
DJango App - Электрондық поштаңызды тексеріңіз Құрметті {{user.username}}, Электрондық поштаны тексеру үшін мына жерді басыңыз. Сонымен қатар, сіз келесі сілтемені шолғыштың мекен-жай жолағында қоюға болады: {{base_url}} {} {URL 'пайдаланушылары:' uidb64 = uid token = uid token = таңбалауыш%} Сілтеме 30 минутта аяқталады. Егер сіз тексеру электрондық поштасын сұрамаған болсаңыз, сіз бұл электрондық поштаны елемей аласыз. Онда кездескенше, ҚұлыБұл электрондық пошта өте қарапайым. Бұл пайдаланушының контексті, сайтқа арналған негізгі URL мекен-жайы және пайдаланушының электрондық поштасын тексеру үшін пайдаланылатын пайдаланушы идентификаторы мен таңбалауышы қажет. Параметрлерде негізгі URL мекен-жайын анықтаңыз. App / Settings.py-ге келесі сызықтарды қосыңыз және басталуға жақын.Site_name = 'Django App' Протокол = 'HTTPS' Домен = 'Мысал Base_url = протокол + ': //' + доменАқыр соңында, сіздің сайтыңыз Интернетке дайын болған кезде және сіз оны орналастырған кезде, сіз өзіңіздің доменіңізді сайтты ұсыну үшін сатып алатын домен атауы ретінде анықтағыңыз келеді. Бұл сіздің сайтыңызға кіру үшін NAVBAR-де теретін атау. Әзірге сіз доменді бос қалдыра аласыз немесе толтырғышты пайдалана аласыз. Сондай-ақ, сіз өзіңіздің сайтыңызды, таңдауыңыз бойынша, сайтқа бергіңіз келетін атқа өзгерткіңіз келеді.
Электрондық поштаны жібермес бұрын, бізде ешқашан бітпейтін тіркелгіге арналған тіркелу токені болуы мүмкін. Біз мұны келесідей, шотты активтендіру таңбалауышын салу және импорттай аламыз. Файлды өңдеңіз:Nano пайдаланушылары / таңбалауыштары.py
Келесі кодты қосыңыз:django.contrib.auth.Tokens-тен PasswordResettokenkengenerator импорттау Алты импорт Сынып токгендераторы (PasswordResettokengenerator): def _Make_hash_value (өзін-өзі, пайдаланушының, уақыт белгісі): қайтару ( алты.text_type (user.pk) + алты.text_type (уақыт белгісі) ) Есептік жазба_activation_token = Tokengenerator () upscribe_token = tokengenerator ()
Бұл негізгі таңбалаушы генератор Токенді жасайды, біз пайдаланушыны URL мекен-жайы бойынша жібере аламыз және пайдаланушы электрондық поштаны тексеру және олардың тіркелгілерін қосу үшін пайдалана алады.
Әрі қарай, электрондық поштаны қалай жіберуге болатынын көрейік. NANO көмегімен пайдаланушыларды өзгерту / email.py.NANO пайдаланушылары / email.py
Тексеруді жіберу HTML электрондық поштасын жіберу келесідей болады:django.contrib.auth Import get_user_model urlsafe_base64_encode, urlsafe_base64_decode django.contrib.sits.shortcuts-тен get_current_site импорттаңыз django.core.mail.mail of send_mail импорттаңыз DJango.Template.Lender_Trender_to_tring. Django.Utils.encoding импорттау Force_BYTES DJango.core.mail.mail of ModeyMultialernates Django.Shortcuts-тен импорттау .Токендерден импорттау Import_activation_token DJango.Template.Lender_Trender_to_tring. Django.Utils.html-ден Strip_tags импорттау DJango.Template-тен импорттау шаблоны, мәтінмән Django.conf импорттау параметрлерінен Импорттау Traceback Def Send_verification_email (пайдаланушы): Пайдаланушы = get_user_model () mail_subject = '[{{}] Тіркелгіні іске қосыңыз. пішімдеу (settings.site_name) HTML_MESSAGE = Render_to_string ('пайдаланушылар / refrand_email.html', { 'Пайдаланушы': пайдаланушы, 'Домен': Параметрлер.domain, 'Протокол': 'HTTPS', 'uid': urlsafe_base64_encode (force_bytes (user.pk)), 'token': есептік жазбасы_activation_token.make_token (пайдаланушы), }) send_html_email (пайдаланушы, mail_subject, html_message)
Бұл өте қарапайым. Біз электрондық поштаны жіберуге, электрондық поштаны жіберіп, электрондық поштаны және біздің параметрлерімізді, содан кейін электрондық поштаны шаблон атауымен және оны функцияны пайдаланып жібере аламыз. Сіз Phisplace функциясын анықтағанымызды байқайсыз, біз поштаны жіберу, жіберу_хт_майл, сондықтан біз оны пайдаланушыларға / email.py-ге енгізген кодтың астында жазайықpip install django-crispy-forms
def send_html_email (пайдаланушы, mail_subject, html_message):
to_email = пайдаланушы.email
Пайдаланушы аты = user.username
Егер to_email == '':
Ешқайсысын қайтарыңыз
unsbub_link = settings.base_url + user.profile.profile.profile.prorate_unsubscrible_Link ()
HTML_MESSAGE = HTML_MESSAGE + «Жазылымдан бас тарту»
msg = emailMultialnatacer (mail_subject, html_mesch), settings.default_from_email, [to_email], тақырыптар - тізім-жазылудан бас тарту ':' '+' + unsbul_link + '}'} '
msg.attach_alternative (html_message, «Text / HTML»)
Профиль = Пайдаланушы.profile
көріңіз:
msg.send (FAILE_SILESE = FALSE)
Егер профиль болмаса.Email_evalid:
profile.email_valid = true
Профиль.SAVE ()
қоспағанда:
profile.email_valid = Жалған
Профиль.SAVE ()Бұл біршама күрделі және біз әлі осы кодты іске қосуға дайын емеспіз. Ескерту Біз unsbub_link_link-ті анықтап жатырмыз, пайдаланушы пайдалана алады, пайдаланушы пайдалана алатын сілтеме біздің электрондық пошталардан бас тарту үшін пайдалана алады. Бұл маңызды, өйткені пайдаланушылар біздің электрондық пошталардан бас тартуы керек, егер олар кез-келген уақытта оларды көргісі келмесе, оларды бас тартуы керек. Сонымен қатар біз HTML тегтерінен алынған HTML хабарламасы болып табылатын хабарламамызға мәтіндік балама қосамыз. Соңында, біз электрондық поштаның жіберілгенін тексереміз, егер ол болмаса, біз пайдаланушының профилінде олардың электрондық поштасы дұрыс емес екенін белгілейміз.
Біз осы жұмысты жасай алатындай етіп пайдаланушы модельдеріне оралайық. Жазылымнан бас тартуға сілтемені құру үшін, пайдаланушының электрондық поштасы жарамсыз деп белгілеу үшін функцияларды анықтау керек. # Алдымен, пайдаланушылардың жоғарғы жағына / модельдерінің жоғарғы жағына келесі импортты қосыңыз
Nano пайдаланушылары / модельдері.py# ... Django.core.Signing Import TimespampSigner, BadSignature, қол қоюшы Django.urls-тен импорттау кері
...
Әрі қарай, пайдаланушы үлгісіне функцияларды қосып, таңбалауыштар жасау және электрондық поштаны қосу үшін пайдаланылатын таңбалауышты, сондай-ақ пайдаланушының пошталарын сәтті қабылдағанын үнемдеу үшін, сондай-ақ өрісті тексеріңіз. Пайдаланушыларда / модельдерде.Py-де. Тағы да, модельдің соңына келесі кодты қосыңыз (шегіністі код)# ... email_valid = models.bouleanfield (әдепкі = шын) def make_token (өзін-өзі): Қайтару уақытының мөлшерлемесі (). белгісі (self.user.username) def тексеру_төкені (өзін-өзі, таңбалауыш): көріңіз: кілт = '% s:% s'% (self.user.user.user.user.user., таңбалауыш) TimestampSigner (). Төлеу (кілт, max_age = 60 * 60 * 24 * 24 * 30) # 30 күн ішінде жарамды қоспағанда (бедеснига, қолтаңба): FALSE қайтарыңыз ШЫНДЫҚТЫ ҚАЙТАРУ def Create_unsubscribe_Link (өзін): Пайдаланушы аты, Token = Token = Self.Make_token (). Сплит («:», 1) қайтару
...30 күн жарамды
Бұл өте қарапайым, біз белгілі бір уақыттан кейін жарамдылық мерзімі аяқталатын таңбалауышты құрайтын қарапайым, бұл қарапайым криптографиялық құрал болып табылады, ол белгілі бір уақыттан кейін жарамды болып табылады, сонымен қатар оның жарамды екенін тексеру үшін басқа функцияны қолданамыз. Біз бұл таңбалауыштарды екі рет, электрондық поштаны тексеру үшін және бірнеше рет жазылудан бас тарту үшін қолданамыз.Енді бізде бар, бізде бар жұмыстың соңғысы, көзқарастарымыз керек. Пайдаланушылар / көріністер аясында.py ішінде, электрондық пошта мекенжайын тексеріп, жазылымнан бас тарту үшін көріністерді қосайық.
Nano пайдаланушылары / Көрулер.pypython manage.py startapp users
Алдымен келесі импортты қосыңыз. Мен бірнеше қосымша уақытта лақтырдым, сондықтан біз тағы да көп заттарды импорттаудың қажеті жоқ.Django.contrib.auth импорттау жүйесінен Django.Shortcuts-тен импорттау, қайта бағыттау, get_object_or_404 django.contrib.auth.models пайдаланушыны импорттау Django.Utils.engrying office force_str urlsafe_base64_encode, urlsafe_base64_decode JSON импорт Импорт сұраныстары Деректерді импорттау, трах Django.contrib-тен импорттау туралы хабарламалар .Models импорттау профилінен DJango.Utils-тен TimeZone импорты django.views.Decorators.cache.cache импорттаудан ешқашан_ .email import of send_verification_email # тексеру электрондық поштасын жіберу функциясын импорттаңыз Django.contrib.auth.Decorators импорттаушы django.contrib.auth.mistys-тен Loginrequiredmixin импорттау, UserPestesTmixin Django.Utils.Decorators-тен Import_decorator импорттау Django.Httphp-ден HttpprespsereDirect Django.conf импорттау параметрлерінен DJango.Utils-тен TimeZone импорты Деректерді импорттау Pytz импорты django.views.decorators.csrf.csrf-тен CSRF_EXEMT импорты DJango.Httphp-ден httpresponse django.contrib.auth.Tokens-тен Default_token_Generator импорттаңыз Django.Utils.httphprtp urlsafe_base64_decode .Токендерден импорттау Import_activation_token
Электрондық поштаны жіберу функциясын импорттауды ұмытпаңызСізде осы импорт бар болуы мүмкін, бірақ оларды қайталауға зиян тигізбейді. Сізге тексеру электрондық пошталарын жіберу функциясын, сондай-ақ users.thokens-тен, басқа импорттауды импорттау керек.
Енді файлдың төменгі жағында келесі кодты қосыңыз:DEF жазылымнан бас тарту (сұрау, пайдаланушы аты, таңбалауыш): Пайдаланушы = get_object_or_404 (пайдаланушы, username = Пайдаланушы аты) IF ((Telect.user.is___tuthentated және to susc.user == пайдаланушы) немесе user.profile.Check_token (Token)): # оларды жазады Профиль = Пайдаланушы.profile profile.subscribtion = ЖАЛҒАН Профиль.SAVE () RETREDER (сұрау, 'пайдаланушылар / жазылымдар.html') # Басқа жерде кіру бетіне қайта бағыттаңыз Хабарламалар.warning (сұраныс, F'your Spentull сілтемесінің мерзімі аяқталды. Жазылымдан бас тарту үшін кіріңіз. ') Келесі_url = кері ('Пайдаланушылар: жазылудан бас тарту', KWARGS = {{'пайдаланушы аты': Пайдаланушы аты, 'Token': Token,}) ReturntPrespsereDirect ('% s? Келесі =% s'% (кері ('Кіру'), Next_url)) Def функциясы (сұрау, uidb64, таңбалауыш): көріңіз: uid = Force_str (URLSAFE_BASE64_Decde (uidb64)) Пайдаланушы = user.objects.get (pk = uid) (TypeError, QueryError, InterneDROWRORORROR, User.DoesNotexist): Пайдаланушы = жоқ IP = get_client_ip (сұрау) Егер пайдаланушы ешқайсысы болмаса және есептік жазбалар_активті_token.check_token (пайдаланушы, токен): user.profile.email_verified = true User.profile.save () User.save () # SendWelcomeMail (сұрау, пайдаланушы) Хабарламалар.Success (сұраныс, F'thanks, электрондық поштаны растау! Сіз енді тіркелгіңізге кіре аласыз, ал сәлемдесу электрондық поштасы сізге жіберіле аласыз. ') Қайтар- Қайта бағыттау (user.profile.crate_face_url ()) тағы басқалар: messages.Success (сұрау, F'your активация сілтемесі аяқталды. Жаңа іске қосу сілтемесін сұраңыз. ') Қайтаруды қайта бағыттау ('Тексеру: тексеру') DEF Resend_activation (сұрау): Егер сұрау.method == «Хабарлама»: Пішін = ResendAcationEmailform (сұраныс.post) Электрондық пошта = Тауап ету.post ['email'] көріңіз: Пайдаланушы = user.objects.get (email = email) Send_verification_email (пайдаланушы) messages.Success (сұрау, 'сіздің растау электрондық поштаңызға жіберілді. Тіркелгіні тексеру үшін электрондық поштадағы сілтемені нұқыңыз.') Қайтарлықты қайтару (кері ('тексеру: тексеру'))) қоспағанда: Хабарламалар.warning (сұрау, F'your Email дұрыс емес. Әрекетті қайталаңыз. ') тағы басқалар: Пішін = ResendActionActionEmailform () Return Render (сұрау, 'пайдаланушылар / resend_activation.html', {parren ': формасы,' Тақырып ':' Қосу ',' Кішкентай ',' small ': true})
Оларды жазады username = request.POST['username'] # Әйтпесе кіру бетіне қайта бағыттаңыз
password = request.POST['password'] # SendwelcomeMail (сұрау, пайдаланушы)
Бұл көптеген код. Оны бұзайық. Бірінші функция, таза және қарапайым, пайдаланушыны тарату тізімінен жазады. Екінші функция электрондық пошталарын іске қосады, және сіз маған түсініктеме берілген функцияны қосқаныңызды байқайсыз, SendwelMoneMail. Сізге сәлемдесу электрондық поштасын жіберу үшін электрондық пошта шаблоны мен функция анықтамасын пайдалануға шақырамыз, мен әлі жоқ. Мен лақтырған соңғы функция маңызды, өйткені активтендіру электрондық пошталары аяқталады. Сондықтан, біз біраз уақыттың қосылу электрондық поштасын қайта жіберуіміз керек. Біз бұл үшін негізгі форманы қолдана аламыз және Verifite электрондық поштасын жіберу үшін функцияны шақыра аламыз. Мұны жасамас бұрын, оның бірінші кезекте, тіркеуге қоңырауды қосу арқылы оның бірінші кезекте жіберілгеніне көз жеткізіңіз. Осы жолды қайта бағыттауды тіркеуден бұрын қосыңыз, def тіркеліңіз, пайдаланушыларда / көріністерде.Nano пайдаланушылары / Көрулер.py
# ... (кейін) Def тіркеу (сұрау): Send_verification_email (пайдаланушы) # ... (дейін) қайта бағыттау (mkdir users/templates
mkdir users/templates/users
... (кейін) Def тіркеу (сұрау):... (бұрын) қайта бағыттау (
Сізге осы код үзіндісінде бірінші және соңғы жолдарды қосудың қажеті жоқ, тек тіркеу электрондық поштасын пайдаланушыға растау электрондық поштасын жібергеніне көз жеткізіңіз. Ол келесідей болуы керек:nano users/templates/users/login.html
# ... Импорт
.Forms-тен UserRegisterForm импорты
DEF ТІРКЕУ (Сұраныс):
Егер сұрау.method == «ПОСТ»:
Пішін = USERREGATERFORM (сұрау.post)
Егер форма.is_valid ():
Пайдаланушы = Form.SAVE ()
Send_veripreiption_email (пайдаланушы) # Бұл жолды қосқаныңызға көз жеткізіңіз!
messages.Success (сұраныс, 'Бағдарламаға қош келдіңіз, {}.'. пішімдеу (user.username))
Return Render (сұрау, 'пайдаланушылар / register.html', {'plange': usergisterform})... Импорт
Бұл жолды қосқаныңызға көз жеткізіңіз!
Енді активтендіру электрондық поштасын қайта жіберу үшін форманы қосу керек. Пайдаланушыларда / Forms.PY-де келесі форманы қосыңыз:# ... (импорт) Сынып-класс релендивациясыМайлым (Forms.form): Электрондық пошта = Forms.emailfield (қажет = шын)
... (импорт)
Сондай-ақ, бізге электрондық поштаны іске қосу нысанына сәйкес келетін шаблон қажет болады. Бұл үлгіні қосып, қосыңыз. Файлды өңдеңіз:Nano пайдаланушылары / шаблондар / пайдаланушылар / resend_activation.html
Әрі қарай, файлға келесі кодты қосыңыз.from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
{% extse.html '%} қолданылады
{% блокталған мазмұн%}
{% Жүктеме Crespy_forms_tags%}
{% csrf_token%}
Қосылған электрондық поштаны қайта жіберу
{{class | қытырлақ}}
Қосылған электрондық поштаны қайта жіберу
{% EndBlock%}Бұл өте көп! Енді, біз біздің серверге кодты қолданған кезде, HTML электрондық поштасын жіберіп, электрондық поштаға нұқу арқылы пайдаланушы тіркелгілерін іске қоса аламыз. Біз сондай-ақ қарапайым сәлемдесу электрондық поштасын жібергіміз келуі мүмкін, сондықтан мұны қалай істеу керектігін көрейік. Пайдаланушылар / email.py-де келесі кодты қосыңыз:
Def SendwelcomeMail (пайдаланушы): Пайдаланушы = get_user_model () HTML = Ашу ('{} / Пайдаланушылар / uports / upter_mail.html'format (settings.Base_dir)). Оқу () Тақырып = 'Қош келдіңіз' + settings.site_name + ', {{{{Пайдаланушы аты}!' шаблон = шаблон (HTML) Subjtemplate = шаблон (тақырып) Мәтінмән ({'пайдаланушы аты': user.username, 'base_url': settings.base_url, 'model_name': 'daisy holton,' site_name ': settings.site_name} RenderEdTemplate = template.render (Мәтінмән) SubjContext = мәтінмән ({'пайдаланушы аты: user.username}) subjrenderedTemplate = Subjtemplate.render (SubjContext) Send_html_email (пайдаланушы, SubjrenderedTemplate, RenderDEmplate)Сондай-ақ, бізге осы ақпараттың барлығын көрсету үшін шаблон қажет болады. Менің веб-сайтымда шаблон төмендегідей көрінеді, бірақ сізге ұнайтындығыңызға қош келдіңіз.
{{Site_name}} қош келдіңіз Сәлем {{{user}}, Біз сізді осында көргенімізге қуаныштымыз! {{Site_name}} қосылып, көңіл көтерудің бір бөлігі үшін рахмет. Жұмысты бастау үшін, сіз өзіңіздің жеке басыңызды тексергеннен кейін жасай алатын бірнеше нәрсе. Қолданбаны қолданыңыз. Бұл {site_name}} басты беті Менің жеке {{site_name}} профиліне кіріңіз. Бұл менімен танысқысы келетін кез келген адам. Қосымша профильдер. Сіз бұл адамдарды сайттан таба аласыз және олардың мазмұнын көре аласыз. Барлық жазбаларды мына жазбаларды қараңыз. Бұл {{site_name}} жеке алдыңғы беті. Сайтта одан да көп нәрсе бар, сондықтан сіз барып, тапқаныңызды көре аласыз. Сіз сайтты әр беттегі кез-келген әлеуметтік батырмалармен бөлісе аласыз. Сізге {site_name}} арқылы уақытыңыз ұнайды деп сенемін! Осында болғаныңыз үшін рахмет. Махаббатпен, {{model_name}} {{base_url}}# Бізде жабылған дене немесе HTML тегтері жоқ екенін ескеріңіз, өйткені біз мыналарды HTML жазылымнан бас тартқан кезде қоссақ. Бұл маңызды, бірақ біз оларды екі рет анықтағымыз келмейді.
Келесіде не бар? Біз ұзақ жолдан өттік. Шынында, біз сайтты серверге орналастыруға дайын болуымыз керек. Біз @login_required декораторын қосып, өз пікірімізді қоса аламыз, пайдаланушы тіркелуін, пайдаланушы тіркелуін, үйлесімді электрондық поштаны және кэш туралы ақпаратты жібере аламыз, бұл веб-сайттың өзекті болу үшін не істеуі керек. Біз тағы бірнеше пайдалы мүмкіндіктерді қосамыз, содан кейін сіздің кодты қашықтағы серверге орналастыру, пошта серверіне, домен конфигурациясын, домен конфигурациясын және сүзгілерді орнатып, біздің сайтымызды қауіпсіз және сәйкес ету үшін орнатамыз.Сондай-ақ, бізге парольді қалпына келтіру керек, сондықтан оны тез қосып, оны қосайық. Құпия сөзді қалпына келтіру кезінде салынған Django кейбір функцияларда бұзылған, бірақ біз өз көзқарасымызды, электрондық пошта шаблонын, пішіндерімізді және URL үлгілерін қалай жазуға болатындығын қарастырамыз. Міне, бұл көрініс, пайдаланушыларда / көріністерде көрінеді.
# ... Импорт django.contrib.auth.Tokens-тен Default_token_Generator импорттаңыз django.contrib.auth.Forms-тен SetPasswordForm импортталады Django.Utils.httphprtp urlsafe_base64_decode Def Password_reset (сұрау, uidb64, token): Пайдаланушы = get_object_or_404 (пайдаланушы, id = urlsafe_base64_decode (uidb64)) Егер сұрау.method == «Хабарлама»: Пішін = SetPasswordForm (пайдаланушы, сұрау.post) Егер c форма.is_valid () және default_token_generator.check_token (пайдаланушы, таңбалауыш): форма.SAVE () messages.Success (сұраныс, құпия сөзді қалпына келтірді. ») elif емес, form.is_valid (): Хабарламалар.warning (сұрау, 'парольдеріңіз сәйкес келмейді немесе талаптарға сай келмейді. Қайталап көріңіз.') Қайтаруды қайтару (сұрау.Ph) тағы басқалар: Хабарламалар.warning (сұраныс, 'Құпия сөзді қалпына келтіру сілтемесі мерзімі аяқталды. Өтінемін, жаңасын жасаңыз.') Қайтар- Қайта бағыттау (кері ('пайдаланушылар: кіру)) қайтару Renter (сұрау, 'пайдаланушылар / пароль_RESET_CONFIMM.HTML', { 'Тақырып': «Құпия сөзді қалпына келтір», 'Form': SetPasswordForm (пайдаланушы)from django.db import models # ... Импорт
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name='posts') # Бұл форма DJango-да құрылған, бірақ парольді қалпына келтіру, пайдаланушылар / шаблондар / пайдаланушылар / пайдаланушылар / құпия сөздерді растау үшін шаблон қажет болады
{% extse.html '%} қолданылады
{% Жүктеме Crespy_forms_tags%}
{% блокталған мазмұн%}
{% csrf_token%}
Құпия сөзді қалпына келтіріңіз
{{class | қытырлақ}}
Құпия сөзді қалпына келтіріңіз
{% Endblock content%}Бізде парольді қалпына келтіру электрондық поштасын, қарапайым пішінді, пайдаланушыларда / шаблондарда / пайдаланушыларда / пайдаланушыларда / parver_reset.html бағдарламасын жіберу үшін шаблон бар.
{% extse.html '%} қолданылады {% Жүктеме Crespy_forms_tags%} {% блокталған мазмұн%} {% csrf_token%} Құпия сөзді қалпына келтіріңіз {{class | қытырлақ}} Құпия сөзді қалпына келтіруді сұрау {% Endblock content%}Электрондық поштаның өзі үшін шаблон қарапайым, бұл парольді қалпына келтіру үшін, пайдаланушылар / шаблондар / Пайдаланушылар / құпия сөздер / charset_email.html-де сілтеме жасайтын негізгі HTML файлы. DJango бұл файлды автоматты түрде түсіндіреді.
UCLEK - парольді қалпына келтіріңіз Сәлем, Құпия сөзді қалпына келтіру үшін мына жерді басыңыз. Сонымен қатар, сіз келесі сілтемені браузеріңізге қоя аласыз: https://uglek.com {{% URL 'құпия сөзі_reset_confirm' uidb64 = uid token =%} Егер сіз парольді қалпына келтіруді сұрамаған болсаңыз, сіз бұл электрондық поштаны елемей аласыз. Бізге қосқаныңыз үшін рахмет, Құлыfrom django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True, related_name='profile')
account_created = models.DateTimeField(default=timezone.now)
last_seen = models.DateTimeField(default=timezone.now)
can_login = models.DateTimeField(default=timezone.now)
preferred_name = models.CharField(max_length=20,default='', null=True, blank=True)
bio = models.TextField(blank=True, default='')
Бізге тағы екі шаблон қажет. Біріншісі - электрондық поштаның жіберілгенін растау. Бұлардың пікірі Джангода, сондықтан біз оларды URLS.PY-де шешу керек. Бұл шаблон пайдаланушыларда / шаблондарда / пайдаланушыларда / пайдаланушыларда / password_reeset_done.html{% extse.html '%} қолданылады {% блокталған мазмұн%} Құпия сөзді қалпына келтіру үшін электрондық пошталар жіберілді. {% Endblock content%}
Парольді қалпына келтіру толық, пайдаланушылар / шаблондар / пайдаланушылар / пайдаланушылар / құпия сөздерді растау үшін ,_reeset_complete.html{% extse.html '%} қолданылады {% блокталған мазмұн%} Сіздің пароліңіз орнатылды. Кіру {% Endblock content%}
Енді бізге осы көріністер үшін URL үлгілері қажет. Пайдаланушыларда / URLS.PY-де келесі URL үлгілерін қосыңыз:# UrlPatterns = [
# ... алдыңғы URL мекенжайлары
жол ('Парольді қалпына келтіру /',
auth_views.passwordreseTView.as_view (
template_name = 'Пайдаланушылар / пароль_RESET.HTML',
html_email_template_name = 'Пайдаланушылар / пароль_RESET_HTML_EMAL.HTML'
),
name = 'Password_reset'),
Жол ('Парольді қалпына келтіру / жасау /',
auth_views.passwordresetdoneview.as_view (
template_name = 'Пайдаланушылар / пароль_RESET_DONE.HTML'
),
name = 'Password_reeset_done'),
жол ('Парольді қалпына келтіру-растау ///',
auth_views.passwordresetconfirmvieviView.as_view (
template_name = 'Пайдаланушылар / пароль_RESET_CONFIMHTHTML'
),
name = 'password_reeset_confirm'),
Жол ('Парольді қалпына келтіру-толық /',
auth_views.passwordreseTresetCompleView.as_view (
template_name = 'Пайдаланушылар / пароль_RESET_COMPLETE.HTML'
),
name = 'password_reeset_complete'),
]
Profile.objects.create(user=user) # ... Алдыңғы URL мекенжайлары
Төрт шаблон, бұл өте көп! Бірақ қазір біз пайдаланушының паролін кез-келген уақытта, барлығын веб-шолғыштан қалпына келтіре алатындығына сенімді бола аламыз.Мен мұны түсінемін, бұл көптеген код. Егер бұл сіздің басыңыздан сәл болса, жақсы. Сіз жақсартасыз, түсінігіңіз жақсарады, ал сіз жақын арада кодпен көбірек сауатты бола аласыз. Егер сіз толығымен жоғалып кетсеңіз, мен осы бағдарламалық жасақтамаға кейінірек өздігінен жұмыс істегеннен кейін, онлайн режимінде жұмыс істегеннен кейін оны үйренуді ұсынамын. Оларды бастау үшін ақысыз, және сіз осы жобаға оралғанда сізге сәттілікке жету керек. Егер сіз жалғастыруға дайын болсаңыз, оқығаныңыздай, келесі, біз сіздің кодты қашықтағы серверге орналастырамыз және пошта серверін орнатамыз, сонымен қатар сіз жаңа жобаны бірнеше қарапайым командалармен орната аласыз.
Қашықтағы серверге орналастырудан бұрын жасау керек соңғы нәрсе - бұл біздің сайтымызды сәл қауіпсіз етеді. Кіру көрінісі тек пайдаланушы аты мен парольді қабылдағанын байқайсыз, және көп фактор аутентификациясы немесе бір реттік код жоқ. Бұл оңай түзету, және бірдей кодпен біз өз сайтымызды мәтіндік хабарламалар жібере аламыз және тіпті серверге жіберілген мәтіндік хабарламаларға жауап бере аламыз. Бастау үшін, біз пайдаланушы модельдеріне қайта ораламыз және әр логинді ұсынатын уақыт белгісі қосқышын қосамыз. Сондай-ақ, біз логинге қосымша қауіпсіздік қосу үшін пайдаланылатын пайдаланушы моделіне бірегей, бұрылатын идентификатор қосамыз. Пайдаланушы үлгілерін, пайдаланушыларды / модельдерді өңдеуді өңдеу, келесі кодты қосыңыз:# DJango.DB импорттау модельдерінен
django.contrib.auth.models пайдаланушыны импорттау
DJango.Utils-тен TimeZone импорты
# UUID, уақыт белгісі және URL генераторын (кері) импорттауды ұмытпаңыз
ЮИИД импорты
Django.core.Signing Import TimespampSigner, BadSignature, қол қоюшы
Django.urls-тен импорттау кері
Сабақ профилі (Models.model):
Пайдаланушы = models.onetoonefield (пайдаланушы, on_delete = models.cascade, null = true, blasth = true, play_name = 'Профиль')
есептік жазба_көрме = models.datetimefield (әдепкі = timezone.now)
Last_seen = models.dateTimeField (әдепкі = timezone.now)
can_login = models.dateTimefield (әдепкі = timezone.now)
modeld_name = models.Charfield (max_length = 20, default = '' ', null = true, bast = true)
Bio = models.textfield (бос = True, Default = '')
# Осы кодты осында қосыңыз
uid = models.Charfield (max_length = 32, әдепкі = uuid.uuid4, null = true, blash = true)
mfa_enabled = models.bouleanfield (әдепкі = жалған)
elector_mfa = models.bouleanfield (әдепкі = жалған)
phone_number = models.Charfield (әдепкі = '', NULL = TRUE, BLANK = TRUE, Max_Length = 15)
VIDER_CODE = models.Charfield (әдепкі = '', null = true, blank = true = true, max_length = 15)
VIDER_CODE_LENTH = Models.integerfield (әдепкі = 6)
mfa_code_expires = models.dateTimeField (әдепкі = timezone.now)
mfa_attempts = models.integerfield (әдепкі = 0)
def_auth_token (өзін-өзі):
Қайтару уақытынғыңыз (). Белгiк (Self.uID)
# Және осы функцияны қосыңыз
def Create_auth_Url (өзін-өзі):
Пайдаланушы аты, Token = Token = Self.Make_auth_token (). Сплит («:», 1)
Қайтару керісінше ('Пайдаланушылар: MFA', KWARGS = {{'пайдаланушының аты': Пайдаланушы аты, 'Token': Token,})
Def тексеру_Auth_token (өзін-өзі, таңбалауыш):
көріңіз:
Кілт = '% s:% s'% (Self.uID, таңбалауыш)
TimestampSigner ()
қоспағанда (бедеснига, қолтаңба):
FALSE қайтарыңыз
ШЫНДЫҚТЫ ҚАЙТАРУ
if user and user.profile.can_login < timezone.now(): # UUID, уақыт белгісі және URL генераторын (кері) импорттауды ұмытпаңыз
else: # Бұл кодты осы жерге қосыңыз
user = User.objects.filter(username=username).first() # Және осы функцияны қосыңыз
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # 3 минут жарамды
Пайдаланушыларыңыз / модельдеріңіз осы сияқты екендігіне көз жеткізіңіз. Мұны бұзып, бұл қарапайым. Бізде бірнеше импорт бар, ол қауіпсіз кодты құра алады және оның жарамды екеніне көз жеткізу үшін тексеріп, оны тексеріп, бір рет пайдаланылған және белгілі бір бірнеше секундтан бұрын қолданылған. Сондай-ақ, біз UUID-ді қолданамыз, бұл бірегей идентификатор болып табылады, бұл белгіге қол қоюдағы біздің пайдаланушымызды және таңбалауыштың пайдаланушыға жіберілетін URL мекенжайында. Біз осы негізгі криптографияны екі фактордың түпнұсқалық растамасын құру үшін қолданамыз. Басқа ештеңе жасамас бұрын, біздің пайдаланушы модельдері жаңартылғанша, тасымалдауды жүргізейік. Басқарушы.py көмегімен каталогта тасымалдауды жасау және аяқтау үшін келесі пәрмендерді іске қосыңыз.Venv / Bin / Activate көзі Python.py.py.py makemigrations && python.py.kz
Бұл өте маңызды, өйткені біз модельдерге өзгерістер енгізген сайын, біз модельдерді қолданар алдында кестелерді жасау және әдепкі бойынша дерекқорды жаңартуымыз керек.Әрі қарай, қайталама аутентификация көрінісіне қайта бағыттау үшін кіруді импровизациялайық. Пайдаланушыларда / Көрулерде.py-де, Кіру функциясын алып, біз тек пайдаланушы үлгілерінде жасаған URL мекен-жайына қайта бағыттаңыз.
# ... Импорт Def Login (Сұраныс): Егер сұрау.method == «ПОСТ»: Пайдаланушы аты = сұрау.post ['Пайдаланушы аты'] Пароль = сұрау.post ['Құпия сөз'] Пайдаланушы = Аутентификация (пайдаланушы аты = пайдаланушы аты, пароль = пароль) Егер пайдаланушы және user.profile.profile.can_login <timezone.now () (): # Енді біз қазір пайдаланушының кіре алатындығын тексеріңіз # Осы жерде болған Auth_login функциясын алыңыз messists.Success (сұрау, 'пароль қабылданды. Өтінемін, жалғастырыңыз.') User.profile.mfa_enabled: қайта бағыттау (user.profile.crate_auth_url ()) # ЕСКЕРТПЕ, біз жаңа URL мекен-жайына қайта бағыттаймыз Басқа: # Егер пайдаланушы Mutli-фактордың аутентификациясын қолданбаса, оларды жай ғана кіріңіз. auth_login (сұрау, пайдаланушы, contend = 'django.contrib.auth.modelbands.modelbackend') Қайтаруды қайтару ('Аралық: арна') Басқа: # Егер логин сәтті болмаса, Хабарламалар. Жаңарту (сұрау, 'пайдаланушы аты немесе пароль дұрыс емес. Қайталап көріңіз.') Пайдаланушы = user.objects.filter (username = Пайдаланушы аты) .First () # Бұл пайдаланушыларға арналған профильді жаңартатын бөлік Егер пайдаланушы: Профиль = Пайдаланушы.profile profile.can_login = TimeZone.now () + datetime.timedelta (секунд = 15) #, сондықтан олар бірнеше секундқа қайта кіре алмайды Профиль.SAVE () Return Render (сұрау, 'пайдаланушылар / кіру.html', {'print': аутентификация нысаны ()})sudo backup
... ИмпортЕнді пайдаланушының кіре алатындығын тексеріңіз
Auth_login функциясын осында шығарып алыңызsudo crontab -e
Ескерту Біз жаңа URL мекен-жайы бойынша қайта бағыттаймызЕгер пайдаланушы көп факторлы аутентификацияны қолданбаса, оларды жай ғана кіріңіз.
Егер кіру сәтсіз болса,0 * * * * sudo backup
Бұл пайдаланушылардың профилін жаңартатын бөлігіСондықтан олар бірнеше секундқа қайта кіре алмайды
Сондықтан бұл өте қарапайым, енді біз оны жасаған кезде екі фактордың аутентификация көрінісіне қайта бағыттаудың әдісі бар. Пайдаланушы телефон нөмірін қосқан жағдайда, бізде резервтік бар. Жақында телефон нөмірін қосу үшін біз негізгі көріністі қосамыз және жақын арада мәтіндік хабармен кіреміз.Біріншіден, бізге біздің кодтан мәтіндік хабарлама жіберудің оңай жолы қажет. Мұны істеу үшін біз бірқатар API-ны таңдай аламыз, бірақ менің ойымша, ең қарапайым адам - Twilio. Олар сонымен қатар кішігірім жобалар үшін жақсы баға ұсынады, сонымен қатар жаппай жеңілдіктер ұсынады. Twilio.com сайтында тіркелгі жасау, сіздің жобаңыз туралы кейбір мәліметтерді толтырыңыз, телефон нөмірін сатып алыңыз және API пернелерін параметрлеріңізге көшіріңіз. Содан кейін, осы кодты жаңа файл, пайдаланушылар / SMS.PY астында қосыңыз.
Nano пайдаланушылары / SMS.PYsudo visudo
# Барлық қажетті пакеттерді импорттаңыз
DJango.Utils-тен TimeZone импорты
Кездейсоқ импорттау
Деректерді импорттау
Django.conf импорттау параметрлерінен
Feed. Middripthe импорттау get_current_request
Django.contrib-тен импорттау туралы хабарламалар
Импорттау Traceback
Есептік жазба_SID = Параметрлер.twilio_account_sid
auth_token = settings.twilio_auth_token
Source_phone = Параметрлер.Phone_Number
# Бұл код мәтінді Twilio-мен жібереді
def Send_text (target_phone, мәтін):
Twilio.rest импорттау клиентінен
көріңіз:
Клиент = Клиент (есептік жазба_, auth_token)
Егер LEN (target_prone)> = 11:
хабарлама = Client.Messages.Create (
to = target_prone,
of_ = source_pone,
дене = мәтін)
қоспағанда:
басып шығару (traceback.format_exc ())
# Көбінесе сандық сандар алу үшін көмекші функциясы
def Get_num_length (num, ұзындығы):
n = ''
x диапазонында (ұзындығы):
n = n + str (num)
int int (n)
# Пайдаланушыны тексеру үшін мәтінді жіберіңіз
Def Send_verripation_text (пайдаланушы):
Ұзындығы = user.profile.profile.profile_code_length
коды = Random.randint (Get_num_length (1, ұзындығы), Get_num_length (9, ұзындығы));
User.Profile.perilement_code = код
User.profile.mfa_code_expires = timezone.now () + dateTime.timedelta (минут = 3)
User.profile.save ()
send_user_text (пайдаланушы, {} үшін сұрау кодыңыз {} {} ». пішімдеу (}}». пішімдеу (settings.site_name, str))))
# Пайдаланушыға осы функцияның кез келген мәтінді жіберіңіз
def send_user_text (пайдаланушы, мәтін):
Send_text (user.profile.phone_number, Text)
# Осы функциямен кодты тексеріңіз
def тексеру_герлендіру_код (пайдаланушы, код):
User.Profile.mfa_atempts + = 1
нәтиже = user.profile.profile.perification_code! = '' және user.profile.profile.profile.profile.mfa_code_code.profile.mfa_code_expires> mystezone.mpires> ander.profile.mfa_tempts <= 3
User.profile.mfa_atts <3 және нәтиже:
User.Profile.perilement_code_length = 6
elif user.profile.mfa_atemps> 2 және нәтиже:
User.profile.perilement_code_length = 8
User.profile.save ()
Қайтару нәтижесі
# Уақытты тексеру
Def тексеру_герлендіру_майы (пайдаланушы):
Нәтиже = user.profile.mfa_code_expires> timezone.now ()
Қайтару нәтижесіБарлық қажетті пакеттерді импорттаңыз
Бұл код мәтінді Twilio-мен жібередіALL ALL=NOPASSWD: /bin/backup
Көптеген сандармен сан алу үшін көмекші функциясыПайдаланушыны тексеру үшін мәтінді жіберіңіз
Пайдаланушыға осы функцияның кез келген мәтінін жіберіңізОсы функциямен кодты тексеріңіз
Уақытты растауПараметрлерді тиісті түрде өзгертіңіз, осы сызықтарды кілттеріңізбен қосыңыз:
# Twilio бақылау тақтасынан көшіріп алыңыз Twilio_account_sid = «» Twilio_auth_token = «» Phone_number = «» Site_name = «» Auth_valid_minutes = 3 # TFA беті бірнеше рет жазылған минуттар саныОларды Twilio бақылау тақтасынан көшіріп алыңыз
TFA парағы бірнеше минуттар саныБіріншіден, бізге екі фактордың аутентификациясы көріністері үшін нысандар қажет болады. Пайдаланушыларды / формалардағы пайдаланушыларды өңдеу, келесі кодты қосыңыз.
# ... Импорт Django импорттау формаларынан # Телефон нөмірін енгізу формасы Class PhoneNumberForm (Forms.form): phone_number = forms.regexfield (Regex = r '^ @ \ + {9,15}' '' '\ d {9,15} $', {9,15} $ ', {' {9,15} '' 'for {' {999999 'форматында енгізілуі керек. 15 санға дейін. »}) def __init __ (өзін-өзі, * Argts, ** Kwargs): Super (PhoneNumberForm, өзін-өзі) .__ Inition __ (* ARG, ** KWARG) өзім -Fields ['phone_number']. Label = phone_number_label # Түпнұсқалық растауға арналған форма CLASS TFaForm (Forms.form): code = forms.integerfield (қажет = жалған) def __init __ (өзін-өзі, * Argts, ** Kwargs): Super (TfaForm, өзін-өзі) .__ Inition __ (* args, ** kwargs) Self.fields ['code']. Widget.attrs.update ({uperocomplete ':' Off '}) help_texts = { 'Код': 'Алты таңбалы кодты телефонға жоғарыдағы батырмамен жібергеннен кейін енгізіңіз.' }nano app/settings.py
... ИмпортБіздің телефон нөмірімізді енгізу формасы
Аутентификацияға арналған формаӘрі қарай, пайдаланушыларда / Көрулерде көріністер жасайық
# ... Импорт Django.Httphp-ден HttpprespsereDirect .Forms-тен FongenMethOf, TFaForm Def MFA (сұрау, пайдаланушы аты, таңбалауыш): Пайдаланушы = user.objects.filter (profile__uid =} Пайдаланушы аты) .First () Егер пайдаланушы болмаса: RETURNTPRESSEREDIRET (кері ('Тексеру: «Келесі») +' Келесі = ') TEST.GEN.GR («Келесі»). пайдаланушы = get_object_or_404 (пайдаланушы, profile__uID = Пайдаланушы аты) Келесі = сұрау.get.get ('Келесі', '' ') Егер USER.PROFILE.MFA_ENABLED: Егер жоқ болса, тексеру_майы (пайдаланушы): User.Profile.mfa_enabled = FALSE User.profile.profile.enable_two_factor_authentication = true User.profile.phone_number = '+1' User.profile.save () Басып шығару ('Пайдаланушыға кіру') auth_login (сұрау, пайдаланушы, contend = 'django.contrib.auth.modelbands.modelbackend') Хабарламалар.warning (сұрау, 'жарамды телефон нөмірін енгізіп, оны кодпен растаңыз.') Қайтару Егер сұрау.method == «Хабарлама»: форма = tfaform (сұрау.post) code = form.data ['code'] Егер код пен код! = '' және код! = Ешқайсысы: Token_validated = User.profile.Check_auth_token (Token) p = user.profile IS_verified = Check_verification_code (пайдаланушы, int (код)) p.mfa_authentated = is_verdified Егер Token_validated: Егер is_verdified болса: user.profile.mfa_enabled = true User.profile.save () auth_login (сұрау, пайдаланушы, contend = 'django.contrib.auth.modelbands.modelbackend') P.VEREFICICTION_CODE = Ешқайсысы p.uid = Get_uuid () p.SAVE () messages.Success (сұраныс, 'Сіз аутентификацияланды. Қош келдіңіз.') QS = '?' Кілт үшін, сұранымның мәні.get.items (): QS = QS + KEY + '' = '' = '+' & ' Егер келесіде! eletprespsereDirect (EXT) Next.start.start.start.startswith ('/ consocors / logout /') немесе келесі.startswith ('/ contocates / lock /') немесе Next.Startswith ('/ есептік жазбалар / Тіркелу /'): Қайтаруды қайтару ('Аралық: арна') elif сұрау.meta.get ('http_refer', '/').StartSwith (interswithssw) Қайтару (кері ('Арнайы: арна')) ЕШҚАНДАЙ ЕЛЕМ: Қайтару тағы басқалар: ReturnPrespsereDirect ('Аралық: арна') тағы басқалар: Хабарламалар. курста (сұрау, сіз енгізген код танылмады. Қайталап көріңіз. ') elif емес Хабарламалар. курста (сұраныс, 'URL таңбалауышы мерзімі аяқталған немесе танылмаған. Әрекетті қайталаңыз.') Шығу (сұрау) Қайтар- Қайта бағыттау (кері ('пайдаланушылар: кіру)) Егер p.mfa_attempts> 3: Хабарламалар.warning (сұрау, 'Қате кодты 3 рет енгіздіңіз. Өзіңізге жаңа код жіберіңіз.') p.Verripreation_code = Ешқайсысы p.SAVE () elif user.profile.can_send_mfa <timezone.now (): User.profile.mfa_atempts = 0 User.profile.can_send_mfa = TimeZone.now () + dateTime.timedelta (минут = 2) User.profile.save () Send_verification_text (пайдаланушы) Membies.Success (сұрау, »телефон нөміріне жіберілген кодты енгізіңіз. Кодекс 3 минут ішінде аяқталады.») тағы басқалар: Хабарламалар. форма = tfaform () hreat_logo = жоқ User.profile.hide_logo: hreat_logo = true Return Render ('user / mfa.html', 'city's', 'cotter': 'codge': true, 'xsmall': 'accl_logo': hreat_logo, 'aCCL_LOGOUT': user.profile.shake_to_logout, 'алдын-ала жүктеу': «}) @login_required def mfa_onboarding (сұрау): Егер сұрау.method == «Хабарлама»: Пішін = PhoneNumberForm (сұрау.post) сұрау.user.profile.phone_number = form.data ['phone_number']. Ауыстыру ('-', '' '). Ребин (' (',' '). Ауыстыру (', ''). Ауыстырыңыз (')', '', '' ' сұрау.user.profile.mfa_enabled = true сұрау.user.profile.enable_two_factor_authentication = true сұрау.user.profile.save () messages.Success (сұрау, 'Телефон нөмірін сіздің шотыңызға қосқан. ») Пайдаланушы = сұрау.user Қайта бағыттау (user.profile.crate_auth_url ())form = phoneNumberForm (бастапқы = {'phone_number': сұрау.user.profile.phone_Number Егер сұраныс.user.profile.phone_number orter '+1'} Return Render (сұрау, 'пайдаланушылар / mfa_onboarding.html', {{title ':' Телефон нөміріңізді енгізіңіз ': «Телефон нөмірін енгізіңіз», «Пішін»: Пішін, «Кішкентай»:SITE_NAME = 'Django App'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_ADDRESS = username@server.com'
EMAIL_HOST_USER = 'username'
EMAIL_HOST_PASSWORD = config['EMAIL_HOST_PASSWORD']
DEFAULT_FROM_EMAIL = '{} <{}>'.format(SITE_NAME, EMAIL_HOST_USER)
... ИмпортСондай-ақ, бізге осы екі пікір үшін шаблондар қажет болады. Алдымен MFA шаблонын қосайық.
Nano пайдаланушылары / шаблондар / пайдаланушылар / mfa.htmlimport os
import json
with open('/etc/config.json') as config_file:
config = json.load(config_file)
Осы HTML кодын шаблонға қосыңыз{% extse.html '%} қолданылады {% блокталған мазмұн%} {% ampp_filters%} {% Жүктеме Crespy_forms_tags%} {% csrf_token%} Тексеру кодын енгізіңіз 1-қадам: кодты жіберіңіз Ешқашан кодты ешкіммен бөліспеңіз, өйткені оны есептік жазбаңызға уақытша қол жеткізу үшін пайдалануға болады. Код жіберу 2-қадам: кодты енгізіңіз {{class | қытырлақ}} {{{User.profile.phone_number | Securnehone}} кодты жіберу үшін ENTER батырмасын басыңыз. Содан кейін кодты енгізіп, Enter пернесін басыңыз. Кодты енгізіңіз {% EndBlock%}
Бұл өзін-өзі түсіндіру. Пішін кодты немесе бос кодты жібереді, ал сіз бос кодты алсақ, біз кодты жібереміз. Сонда бізде екі рет жіберіңіз, және осылайша біз кодты екі батырмамен жібере аламыз. Әрі қарай, телефон нөмірін қосу үшін қарапайым форманы қосамыз.NANO пайдаланушылары / шаблондар / пайдаланушылар / mfa_onboarding.html
Келесі HTML қосыңыз:sudo nano /etc/config.json
{% extse.html '%} қолданылады
{% блокталған мазмұн%}
{% Жүктеме Crespy_forms_tags%}
{% csrf_token%}
Екі фактор аутентификациясын орнатыңыз
{{class | қытырлақ}}
Телефон нөмірін қосыңыз
{% EndBlock%}Бұл форма әлдеқайда қарапайым, ол біз жасаған телефон нөмірін ұсынамыз және пайдаланушыға телефон нөмірін қосуға мүмкіндік береді.
Бұл өте жақсы көрінеді! Бәрі дұрыс орнатылғанша, біз хабарламаларды жіберіп, пайдаланушыны телефон нөмірімен телефон нөмірімен тіркей алуымыз керек, URL үлгілерін қосқаннан кейін. Біз орнатуымыз керек соңғы нәрсе - бұл профильдің көрінісі.{
"EMAIL_HOST_PASSWORD": "<some password here>"
}
Пайдаланушыларға / көріністерге профиль көрінісіне кірейік. Бұл көрініс пайдаланушының био, электрондық поштасы, пайдаланушы аты және телефон нөмірін, сонымен қатар көп факторлардың аутентификациясын қосуға мүмкіндік береді. Біріншіден, бізге пайдаланушыларда / формаларда тағы екі формасы қажет# ... Импорт useruppdateform класы (Forms.modelform): Электрондық пошта = Forms.emailfield () Сынып мета: Модель = пайдаланушы Өрістер = ['Username', 'email'] phone_number_label = 'Телефон нөмірі (бос орындар, пішім жоқ) (\' немесе сызықшалар \ '- \', тек + ғана басталады) Class ProfilePDateForm (Forms.modelform): ЖАЗЫЛДЫ = Forms.BouleAnfield (қажет = жалған) phone_number = Forms.Charfield (қажет = жалған) def __init __ (өзін-өзі, * Argts, ** Kwargs): Super (profilemupDateform, өздігінен) .__ Inition __ (* args, ** kwargs) Сынып мета: Модель = профиль Fields = ['Bio', 'Phone_Number', 'Provest_mfa', 'Жазылу']
... Импортnano users/templates/users/verification_email.html
Әрі қарай, біз осы форманы да қолдануға қатысты көріністі жасай аламыз. Пайдаланушыларды / көріністерді өңдеңіз және көрініске қосыңыз.
# Импорттауды қосыңыз
from .forms import UserUpdateForm, ProfileUpdateForm
django.views.Decorators.cache.cache импорттаудан ешқашан_
django.views.decorators.csrf.csrf-тен CSRF_EXEMT импорты
.Models импорттау профилінен
.MFA импорты Import reth_user_text
@CSRF_EXEMT
@never_cache
@login_required
DEF профилі (сұрау):
Егер сұрау.method == «Хабарлама»:
u_form = useruppdateform (count.post, мысалы = сұрау.user)
p_form = profilePupDateform (сұрау.post,
сұрау.files,
Instance = сұрау.user.profile)
Егер u_form.is_falid () және p_form.is_falid ():
new_phone_number = p_form.data ['phone_number']
u_form.save ()
Профиль = P_FORM.SAVE (COST = FALSE)
profile.phone_number = profile.phone.phone_number.replace ('-', '') .replace ('(', '' '). Ауыстыру (') ',' '' ('' ')
Профиль.SAVE ()
Егер new_phone_number!
profile.mfa_enabled = true
Профиль.SAVE ()
Send_text (Onnprofile.phone_Number »телефон нөмірі '+ new_phone_number +'. Кіру үшін« + New_Phone_number »-ге жаңартылды. Егер сіз осы өзгерісті жасамасаңыз, қоңырау шалыңыз. - {} '. Пішім (settings.site.site_name))
Егер профиль.
profile.enable_two_factor_authentication = жалған
Membies.Success (сұрау, F'TWo факторының аутентификациясы телефон нөмірін енгізбестен қосылады. Екі фактордың түпнұсқалық растамасын қосу үшін телефон нөмірін енгізіңіз. ')
Профиль.SAVE ()
Егер new_phone_number! = OndProfile.Phone_Number және new_phone_number және len (new_phone_number)> = 11:
Send_user_text (сұрау.User, 'Сіз бұл нөмірді {} {} -ге қосқан екі фактордың түпнұсқалық растамасы үшін қосқан. Енді сіз осы өзгерісті жасамасаңыз, қоңырау шалыңыз. - {} »
profile.mfa_enabled = true
profile.mfa_code_expires = timezone.now () + dateTime.timedelta (минут = 3)
Профиль.SAVE ()
Қайта бағыттау (profile.create_auth_url ())
messages.Success (сұрау, f'your профилі жаңартылды! »)
Басып шығару ('Профиль жаңартылды')
Қайтар- Қайта бағыттау ('Пайдаланушылар: Профиль')
тағы басқалар:
u_form = userupdateform (мысалы = сұрау.user)
P_FORM = ProfilePupDateForm (мысалы = ІЗДЕУ.
Мәтінмән = {
'u_form': u_form,
'p_form': p_form,
'Тақырып': «Профильді жаңарту»,
}
Қайтар- көрсету (сұрау, 'пайдаланушылар / profile.html, мәтінмән)Бұл импорттарды қосыңыз
Бізге осы көрініс үшін шаблон қажет болады.SITE_NAME = 'Django App'
PROTOCOL = 'https'
DOMAIN = 'example.com'
BASE_URL = PROTOCOL + '://' + DOMAIN
Nano пайдаланушылары / шаблондар / пайдаланушылар / profile.html{% x base.html '%} {% Жүктеме Crespy_forms_tags%} {% жүктеу_ын жүктеу_ {% блокталған мазмұн%} Профильді өңдеңіз {% csrf_token%} Профиль туралы ақпарат {{u_form | қытырлақ}} {{p_form | қытырлақ}} Жаңарту} Сақталды {% Endblock content%} {% Block JavaScript%} var form = document.GetelementByID ('Профиль нысаны'); $ ('енгізу'). Өзгерту (функция () { var formdata = жаңа формата (форма); $ .AJAX ({ URL: терезе.lRocation.href, Түрі: «ПОСТ», Деректер: Formdata, ProcessData: Жалған, ContentType: Жалған, Күту уақыты: 1000 * 60, Табыс: функция (мәліметтер) { $ (жарияланған) .removeclass («Жасыру»); settimous (функция () { $ (жарияланған) .ADDCLASS («FADE-жасырылған»); settimous (функция () { $ (жарияланған) .addclass («Жасыру»); $ (жарияланған) .removeclass («Fade-Hidd»); }, 2000); }, 2000); } }); }); {% EndBlock%}
Сіз бұл қарапайым форманы байқайсыз, бірақ оларда бірнеше JavaScript бар, олар форманың мазмұнын автоматты түрде орналастырады, олар жаңартылған кезде. Бұл пайдалы, сондықтан сіз әр уақытта жіберілмей, өңдей аласыз.Әрі қарай, бізге URL мекен-жайы бойынша осы көріністердің барлығын білдіретін URL мекен-жайы қажет. Пайдаланушыларды / URL мекен-жайларын өңдеңіз және осы кодты қосыңыз:
# ... Алдыңғы код, импорт DJango.urls-тен импорттау жолынан бастап. Импорт көріністері app_name = 'Пайдаланушылар' UrlPatterns = [ # ... URL үлгілері Біз бұрын енгізілген, келесі үш жолды қосыңыз жол ('mfa ///', views.mfa, name = 'mfa'), жол ('MFA / ORBOORD /', views.mfa_onboarding, name = 'mfa_onboarding'), жол ('profile /', views.profile, name = 'profile'), ]nano users/tokens.py
... Алдыңғы код, импорт... Біз бұрын енгізілген URL үлгілері, келесі үш жолды қосыңыз
Қазір біздің жобаны сынауға жақсы уақыт келді. Бірақ алдымен тағы бір резервтік көшірме жүргізейік.from django.contrib.auth.tokens import PasswordResetTokenGenerator
import six
class TokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (
six.text_type(user.pk) + six.text_type(timestamp)
)
account_activation_token = TokenGenerator()
unsubscribe_token = TokenGenerator()
сақтық көшірмеЖәне серверді іске қосыңыз. Linux серверіне қолданбас бұрын, есептік жазбада екі фактордың аутентификациясын қосқан дұрыс. Біз мұны профиль URL мекен-жайымызға, / пайдаланушыларға / профильге /, телефон нөмірін енгізгеннен кейін аутентификацияны қосу үшін, содан кейін нысанды жіберуге арналған құсбелгіні қойамыз.
Python.py.py.prerver runserver localhost: 8000Веб-сайтқа кіріп барамын, мен Google Chrome-ді осы мысалда қолданамын және URL URL мекен-жайына кіремін: // locromast: 8000 / Тіркелгілер / Профиль /
Қажет болса, сіз кіре аласыз және екі фактордың түпнұсқалық растамасын қосыңыз.nano users/email.py
Бұл жобаға серверді қосу үшін сервер керек, сондықтан оны шынымен жібере алады. Бірақ алдымен бізге қателіктерді көрудің жолы қажет. Егер сіз серверді күйге келтіру режимінде іске қоссаңыз, Settings.Debug TRUE-ге тең болса, сервер автоматты түрде қателерді көрсетеді. Түзету режимін пайдаланбай қателіктер көрсету, ол өндірістік серверде қауіпті болып табылмайтын, біз оған көріністі қосуымыз керек. Бізді өңдеу керек маңызды қателер:500-қате - біздің кодымыздағы мәселе Қате 404 - табылмады (сынған URL) 403 қатесі - рұқсат берілмеген қателік
Қателерді қателіктер деп аталатын қателерді өңдеу үшін жаңа қолданбаны қосайық.from django.contrib.auth import get_user_model
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.core.mail import EmailMultiAlternatives
from django.shortcuts import render
from .tokens import account_activation_token
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from django.template import Template, Context
from django.conf import settings
import traceback
def send_verification_email(user):
User = get_user_model()
mail_subject = '[{}] Activate your account.'.format(settings.SITE_NAME)
html_message = render_to_string('users/verification_email.html', {
'user': user,
'domain': settings.DOMAIN,
'protocol': 'https',
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
send_html_email(user, mail_subject, html_message)
Python.py.py.py artapp қателіктеріМұны біз жасағандай етіп орнатыңыз, біз бұрын жасадық, орнатылған_apps параметрінде және App / URLS.PY-дегі сілтемелерді қосудан бастаңыз, онда App / URLS.PY-де сілтемелерді қосу, онда App DJango жобасының атауы орналасқан.
handler404 = 'Errors.Views.handler.com' handler500 = 'Errors.Views.handler500' handler403 = 'Errors.Views.handler.com'def send_html_email(user, mail_subject, html_message):
to_email = user.email
username = user.username
if to_email == '':
return None
unsub_link = settings.BASE_URL + user.profile.create_unsubscribe_link()
html_message = html_message + "<p><a href=\"" + unsub_link + "\" + title=\"Unsubscribe from " + settings.SITE_NAME + " emails\">Unsubscribe</a></p></body></html>"
msg = EmailMultiAlternatives(mail_subject, strip_tags(html_message), settings.DEFAULT_FROM_EMAIL, [to_email], headers={'List-Unsubscribe' : '<' + unsub_link + '>'},)
msg.attach_alternative(html_message, "text/html")
profile = user.profile
try:
msg.send(fail_silently=False)
if not profile.email_valid:
profile.email_valid=True
profile.save()
except:
profile.email_valid=False
profile.save()
Бұл бізге қателер көріністерінен, шаблондардан және аздап орта буыннан басқа қажет. Оларды анықтайық:Django.Shortcuts-тен импорттау, қайта бағыттау DJango.Httphp-ден httpresponse Stacktrace.models-тен Импорттау қатесі қателіктерден. Middripthe импорттау Get_Current_Exception Django.contrib.auth.Decorators импорттаушы Django.contrib.auth.Decorators-тен user_passes_test импорттау .Logs-тен импорттау Get_logs Face.tests импорттау is_superuser_or_vendor django.views.decorators.csrf.csrf-тен CSRF_EXEMT импорты қателіктерден. DJango.Shortcuts-тен REDRECT импорттау Django.urls-тен импорттау кері # Көріністерді осы жерден жасаңыз. @login_required @user_passes_test (is_superuser_or_vendor) DEF журналдары (сұрау): logs = LateLext_code (Get_logs ()) Return Render («Resergrors / Live_Error.html», 'proater log': 'pagetitle', 'pagetitle': 'Ескертпелер', 'Ескертпелер. @login_required @user_passes_test (is_superuser_or_vendor) def logs_api (сұрау): logs = LateLext_code (Get_logs ()) Return httpresponse (журналдар) @login_required def Handler.com (сұрау, ерекшелік): Егер жоқ болса. Return Render («Қателер / Error.html», 'ite title', 'pagetitle', 'pagetitle', 'notes': 'Бұл бет серверде табылмады. Ол жылжытылған немесе жойылған болуы мүмкін.', 'is_404': true}) def Handler500 (сұрау): басып шығару (Get_Current_Exception ()) Пайдаланушы = жоқ Егер HASATTR (сұрау, пайдаланушы ») және сұрау.user және сұрау.user.us_ATHЕНТТЕРІ: Пайдаланушы = сұрау.user көріңіз: ERROR.OBJECTS.Create (user = user = user, stack_trace = Get_Current_Exception) (), Notes = '500 өңдегіш.') қоспағанда: өту Return Renter («Қателер / қате.html», 'title 500': 'pagetitle', 'notes', 'notes', 'Notes', сізден сұраныс бар. def handler.com (сұрау, ерекшелік): Return Render («Қателер / қате.html», 'ite tith', 'pagetitle', 'pagetitle', '\'s', 'notes', 'notes', 'Егер сіз бұл сұраныста болса, сіз бұл қате болса, серверге хабарласыңыз.', 'is_403': true}) def Handler400 (сұрау, ерекшелік): Return Render («RESTRORS / ERROR.HTML», {the perror.html ':' Error 400 ',' PageTele ',' Pagetitle ',' Notes ':' Notes ':' Бұл жаман сұрау болды. '})
Көріністеріңізді мына жерден жасаңыз.Әрі қарай, осы қателерді өңдеу үшін ортаңғы бағдарламаны анықтайық. Біз мұны алдымен ArchiteWare_Class бағдарламаларында бірінші рет қосып, параметрлеріміз.
Орта бағдарлама_классалар = [ # ... алдыңғы ортаңғы бағдарлама «Қателер. ]... алдыңғы ортаңғы бағдарлама
Әрі қарай, ортаңғы бағдарламаны қосайық.nano users/models.py
жергілікті импорттаудан жергілікті
Импорттау Traceback
Django.Utils.deprecation Тегін Бағалаусыз
_ERROR = жергілікті ()
Сынып мерекелік ерекше мәйітті
Def Process_Exception (өзін-өзі, сұрау, ерекшелік):
_ERROR.VALUE = Traceback.format_exc ()
def Get_Current_Exception ():
көріңіз:
қайтару _ERROR.VALUE
Атсипаттағы кронтордан басқа:
Ешқайсысын қайтарыңыз
Def Set_Current_Exception (Ерекшелік):
көріңіз:
_ERROR.VALUE = Ерекшеліктер
Атсипаттағы кронтордан басқа:
Басып шығару ('Атрибуттар қатесі параметрлерін орнатудан тұрады.')# Біз ағымдық ерекшелікті алу үшін функционалды қосамыз, бұл кез-келген қателерді біздің кодтағы қателіктерді бақылауға көмектеседі. Шаблондар тұрғысынан бізге тек біреуі керек, өйткені біз тақырыпты динамикалық түрде анықтаймыз. Шаблон тек тақырыпты және «із» және «TRASE», біздің қателіктеріміз контекстен.
NANO қателері / шаблондар / қателер / қате.html{% extse.html '%} қолданылады {% блокталған мазмұн%} {{pagetitle}} {{trace}} {% EndBlock%}
Бұл біздің қарапайым шаблонымыз, бірақ біздің жобамыздағы қателерді көру қаншалықты оңай. Әрі қарай, Параметрлердегі түзетулерді өшірейік.# nano app / settings.py
TimestampSigner().unsign(key, max_age=60 * 60 * 24 * 30) # Бұл жолды TRUE орнатыңыз және оны жалған деп өзгертіңіз
Debug = жалғанҚазір қосымшаны сақтаңыз және сақтық көшірме жасаңыз. Біз қашықтағы Linux серверіне қолдануға дайынбыз және сол жерден мүмкіндіктерді қосуды жалғастырамыз.
Судо сақтық көшірмесіБіз бұл кодты серверге жібермес бұрын, кодпен кейбір мәселелер болуы мүмкін деп санауымыз керек. Іске байланысты, оларға орналастырылған ақпаратты қабылдайтын сайттар спамның жарияланған және спамды жою қиынға соғады. Бұл бірден болмауы керек, бірақ егер ол болып жатқан болса, біз кейінірек сайтқа қалай орташа спамды қалай құрметтейміз және оны роботтарға қаттырақ жасаймыз, оны сайтқа қалай сөндіруге және пайдаланушының идентификаторын қалай сөндіруге болатындығын және пайдаланушының жеке басын тексеріп, саусақ ізі немесе бет-әлпеті сияқты тексеріңіз.
Көп факторлардың аутентификациясына қарап, біз зерттелді, өндірісте заттар басқаша болуы мүмкін. Біз қалай шектеулі логиндермен және токендермен жүретінімізге назар аударыңыз. Егер роботтар сайтқа кірсе, екі фактордың аутентификациясы қиын болуы мүмкін Бұған қарсы тұру үшін, пайдаланушы модельдерінде модельді пайдаланайық, біз сайтпен қалай қарым-қатынас жасаймыз деп мәлімдейік, біз сайтпен қалай қарым-қатынас жасаймыз деп мәлімдеді. Сондай-ақ, біз электрондық поштамен аутентификациялау үшін опцияны қосамыз. Нано көмегімен пайдаланушы модельдерін өңдеуден бастаңыз.nano users/views.py
Nano пайдаланушылары / модельдері.pyБұл біз қосып жатқан модельге ұқсас болуы керек. Бізде ешқандай әдістер, тек идентификаторды, пайдаланушыны, уақыт белгісін, ұзындығын, ұзындығын, ұзындығын және кез-келген көп факторлардың аутентификациясына қарсы әрекеттерді, ұзындығын және әрекеттерді сақтаудың қажеті жоқ (телефонға немесе электрондық поштаға жіберілген).
# Веб-сайтқа кіру үшін пайдаланылған негізгі токен Сынып MFAToken (Models.model): Пайдаланушы = models.foreshikey (пайдаланушы, on_delete = models.cascade, in sull_name = 'mfa_tokens') Timestamp = models.datetimefield (әдепкі = timezone.now) мерзімі = models.dateTimefield (әдепкі = timezone.now) Token = models.Charfield (әдепкі = '', max_length = 100) Ұзындығы = models.integerfield (әдепкі = 6) әрекеттер = models.integerfield (әдепкі = 0) uid = models.Charfield (әдепкі = uuid.uuid4, max_length = 100)from .email import send_verification_email # Веб-сайтқа кіру үшін пайдаланылатын негізгі токен
Біздің пайдаланушымызға артықшылық берейік, ал біз оны қазір қолмен, артықшылықты пайдаланушыларға автоматты түрде көшіру үшін қолмен орнатамыз. Пайдаланушы модельдерінде осы жолды профильге қосыңыз:vendor = models.bouleanfield (әдепкі = жалған)
Деректер базасындағы кез-келген өзгерістер болғандықтан, бізді кез-келген уақытта DJango-да өңдейтін кез келген уақытта тасымалдауды және дерекқорды тасымалдау қажет. Есіңізде болсын, мұны істеу, алдымен біз алдымен көзді қолданамыз (егер ол терминал ашық болғаннан бері қолданылмаса), содан кейін қоныс аудару және қоныс аудару үшін Python.py.CD жобалық-анықтамалық-каталогы # сіз # (қажет болса) Venv / Bin / Activate көзі Python.py.py.py makemigrations && python.py.kz
(қажет болса) # Әзірге сіз Shell көмегімен сіз жасаған кез-келген есептік жазбаны ала аласыз.
# Python.py Shell басқарады
Пайдаланушылардан.models профилін импорттаңыз
p = profile.objects.get (user__username = 'charlotte')
p.Vendor = true
p.SAVE ()
Шығу ()
# Енді осы таңбаны пайдалану үшін көп факторлы аутентификация көрінісін дамытыңыз. Біріншіден, бізге MFA Helper коммуналдық қызметтерін өзгерту керек. NANO көмегімен,
Nano пайдаланушылары / MFA.PYDJango.Utils-тен TimeZone импорты Кездейсоқ импорттау Деректерді импорттау Django.conf импорттау параметрлерінен Feed. Middripthe импорттау get_current_request Django.contrib-тен импорттау туралы хабарламалар .email import of send_html_email Импорттау Traceback .Модельдерден MFAToken импорты импортталады Есептік жазба_SID = Параметрлер.twilio_account_sid auth_token = settings.twilio_auth_token Source_phone = Параметрлер.Phone_Number def Send_text (target_phone, мәтін): Twilio.rest импорттау клиентінен көріңіз: Клиент = Клиент (есептік жазба_, auth_token) Егер LEN (target_prone)> = 11: хабарлама = Client.Messages.Create ( to = target_prone, of_ = source_pone, Дене = мәтін + 'мәтінді тоқтату үшін мәтінді тоқтату' ') қоспағанда: Хабарламалар.warning (get_current_request (), 'Хабарламаны жіберген қате болды.') басып шығару (traceback.format_exc ()) def Get_num_length (num, ұзындығы): n = '' x диапазонында (ұзындығы): n = n + str (num) int int (n) def жіберу_герлендіру_мәтін (қолданушы, таңбалауыш): Ұзындығы = user.profile.profile.profile_code_length коды = Random.randint (Get_num_length (1, ұзындығы), Get_num_length (9, ұзындығы)); token.token = код Token.expires = timezone.now.now () + dateTime.timedelta (минут = settings.auth_valid_minutes) Token.save () send_user_text (пайдаланушы, {} үшін сұрау кодыңыз {} {} ». пішімдеу (}}». пішімдеу (settings.site_name, str)))) Def Send_verripation_email (пайдаланушы, токен): Ұзындығы = user.profile.profile.profile_code_length коды = Random.randint (Get_num_length (1, ұзындығы), Get_num_length (9, ұзындығы)); token.token = код Token.expires = timezone.now.now () + dateTime.timedelta (минут = settings.auth_valid_minutes) Token.save () send_html_email (пайдаланушы, {} үшін) {} {}, {}, {}, {}, {}. str (код), settings.site_name)) def send_user_text (пайдаланушы, мәтін): Send_text (user.profile.phone_number, Text) Def тексеру_герлендіру_код (пайдаланушы, таңбалауыш, код): token.attempts = token.attments + 1 Профиль = Пайдаланушы.profile Нәтиже = (таңбалауыш! = Ешқайсысы мен код! Егер Totken.AttEmsems <3 және нәтиже: profile.verripation_code_length = 6 Elif Token.Etpts> 1 және нәтиже: profile.verification_code_length = Профиль.verripation_code_length + 2 Егер Profile.verification_code_length> settings.mfa_token_length: profile.mfa_code_length = settings.mfa_token_length Token.save () Профиль.SAVE () Қайтару нәтижесі
# Пайдаланушының электрондық пошталарын немесе телефон нөмірін пайдаланып аутентификация Def MFA (сұрау, пайдаланушы аты, Usertoken): Token = mfatoken.objects.filter (uid = Пайдаланушы аты, мерзімі.now.now (ust = timezone.now.now (under_3). Transh_by (ustress)). Transh_by ('- уақыт белгісі) Егер белгісіз: token = mfatoken.objects.objects.create (user = user.objects.filter) Пайдаланушы = user.objects.filter (id = token.user.id) .First () # пайдаланушыны таңбадан алыңыз Егер пайдаланушы және сұрау. Егер қолданбаса: Егер пайдаланушы табылмаса, рұқсат беруден бас тарту () # бас тарту Келесі = сұрау.get.get ('Келесі', '' ') Егер USSORT.Profile.Profile.profile.po_two_two_factor_authentication және user.is_acter.check_auth_token (USERTOKEN, Token): # AuthoR Token-ді тексеріңіз auth_login (сұрау, пайдаланушы, contend = 'django.contrib.auth.ackends.modelbackend') # жүйеге кірмеген болса, пайдаланушыға кіріңіз User.profile.mfa_expires = timezone.now.now () + dateTime.timedelta (minution = settings.login_valid_minutes). User.profile.save () қайтару httprespsereDirect (егер келесі болса, келесі! Егер USOLE болмаса, user.profile.mfa_enabled: # MFA қосылғанын тексеріңіз Егер жоқ болса, тексеру_майы (пайдаланушы, токен): # уақытты тексеріңіз User.Profile.mfa_enabled = False # Телефон нөмірін тазалаңыз User.profile.profile.enable_two_factor_authentication = true # mfa User.profile.phone_number = '+1' # телефон нөмірін өшіріңіз User.profile.save () # Профильді сақтау auth_login (сұрау, пайдаланушы, contend = 'django.contrib.auth.ackends.modelbackend') # егер олардың MFA қосылмаған болса, пайдаланушыны кіріңіз Хабарламалар.warning (сұрау, 'жарамды телефон нөмірін енгізіп, оны кодпен растаңыз.') Қайтару Егер сұраныс.method == «Хабарлама» және орындалмаса, алаяқтық емес (сұрау, шын): # Егер сұраныс тапсырыс болса форма = tfaform (сұрау.post) # форманы асыра пайдалану коды = STR (Form.Data.get ('code', жоқ)) # кодты алыңыз Егер код пен код! = '' 'және код! = Ешқайсысы: # жоқ екеніне көз жеткізіңіз Token_validated = user.profile.Check_auth_token (Usertoken) # AuthoR Token-ді тексеріңіз p = user.profile IS_verified = Check_verification_code (пайдаланушы, таңбалауыш, код) # кодты тексеріңіз p.mfa_authentated = is_verdified Егер Token_validated: # Егер бәрі болса Егер is_verdified болса: # тәртіппен User.Profile.mfa_enabled = true # mfa (егер әлі қосылмаған болса) User.profile.save () auth_login (сұрау, пайдаланушы, contend = 'django.contrib.auth.ackends.modelbackend') # Кіру Face = user.faces.filter (Session_Key = None) .last () p.mfa_expires = timezone.now.now () + datetime.timedelta (минут = settings.login_valid_minutes) p.SAVE () messages.Success (сұраныс, 'Сіз аутентификацияланды. Қош келдіңіз.') QS = '?' Кілт үшін, сұранымдағы мән. QS = QS + KEY + '' = '' = '+' & ' Егер келесіде! extprespsereDirect (Келесі) # қайта бағыттау Next.start.start.start.startswith ('/ consocors / logout /') немесе келесі.startswith ('/ contocates / lock /') немесе Next.Startswith ('/ есептік жазбалар / Тіркелу /'): қайта бағыттау (кері ('/'))) elif сұрау.meta.get ('http_refer', '/').StartSwith (interswithssw) қайта бағыттау (кері ('/'))) ЕШҚАНДАЙ ЕЛЕМ: қайта бағыттау (кері ('/'))) тағы басқалар: ReturntPrespsereDirect (кері ('тексеру:' тексеру: «verrify») + 'Келесі =' + Тапсырыс.meta.get ('http_refer', '/'))) тағы басқалар: Хабарламалар. курста (сұрау, сіз енгізген код танылмады. Қайталап көріңіз. ') Elif емес Хабарламалар. курста (сұраныс, 'URL таңбалауышы мерзімі аяқталған немесе танылмаған. Әрекетті қайталаңыз.') Шығу (сұрау) Қайтар- Қайта бағыттау (кері ('пайдаланушылар: кіру)) Егер P.MFA_AttEmpts> 3: # Егер тым көп әрекет болса хабарламалар. курста (сұраныс, 'сіздұрыс емес кодты 3 рет енгізді. Өзіңізге жаңа код жіберіңіз. ') p.Verripreation_code = Ешқайсысы p.SAVE () elif user.profile.can_send_mfa <timezone.now (): User.profile.mfa_atempts = 0 User.profile.can_send_mfa = TimeZone.now () + dateTime.timedelta (минут = 2) User.profile.save () Егер Form.Data.get ('send_email', жалған): # электрондық поштаны (немесе мәтінді) жіберу send_mfa_verliation_email (пайдаланушы, таңбалауыш) тағы басқалар: Send_verification_text (пайдаланушы, таңбалауыш) Membies.Success (сұрау »(Сұраныс,» телефон нөміріне немесе электрондық поштаға жіберілген кодты енгізіңіз. Код 3 минутта аяқталады. ») elif user.profile.pan_send_mfa <timezone.now () + datetime.timedelta (секунд = 115): Хабарламалар. форма = tfaform () hreat_logo = жоқ User.profile.hide_logo: hreat_logo = true Егер сұрау.user.is_authentated: қайта бағыттауды қайтару (кері ('/')) # Форманы көрсетіңіз (сұраныс алу үшін) Return Render («YOUTES / MFA.HTML»: 'ite ite's:' prate ': true,' accl_logo ': «accl_logo»: «accl_logo_to_logout,« алдын-ала жүктеңіз »:« AutoFocus »: сұрау.method ==nano users/views.py
Пайдаланушыны электрондық поштаны немесе телефон нөмірін пайдаланып аутентификациялау# Токенді URL мекенжайында (UUID) жіберілген мән бойынша сүзіңіз
# Егер бұл сеанс жасалмаса, оны жасаңыз
Пайдаланушыны таңбадан алыңызЕгер олар аутентификацияланған болса, оларды кіріңіз
Пайдаланушы табылмаса, жоққа шығарыңыз# Ауыз таңбасын тексеріңіз
send_verification_email(user) # Егер олар жүйеге кірмеген болса, пайдаланушыға кіріңіз
Олардың көп факторларының аутентификациясы бойынша жарамдылық мерзімін белгілеңізПайдаланушыны келесі бетке бағыттаңыз
MFA қосылғанын тексеріңіз# Уақытты тексеріңіз
Телефон нөмірін тазалаңызMFA қосыңыз
Телефон нөмірін өшіріңізnano users/templates/users/resend_activation.html
Профильді сақтаңызЕгер олардың MFA қосылмаған болса, пайдаланушыны тіркеңіз
Егер сұраныс пошта арқылы сұрау болса
Пішінді жеделКодты алыңыз
Оның бос емес екеніне көз жеткізіңізdef sendwelcomeemail(user):
User = get_user_model()
html = open('{}/users/welcome_email.html'.format(settings.BASE_DIR)).read()
subject = 'Welcome to ' + settings.SITE_NAME + ', {{ username }}!'
template = Template(html)
subjtemplate = Template(subject)
context = Context({'username': user.username, 'base_url': settings.BASE_URL, 'model_name': 'Daisy Holton, 'site_name': settings.SITE_NAME})
renderedtemplate = template.render(context)
subjcontext = Context({'username': user.username})
subjrenderedtemplate = subjtemplate.render(subjcontext)
send_html_email(user, subjrenderedtemplate, renderedtemplate)
Ауыз таңбасын тексеріңізКодты тексеріңіз
Егер бәрі болса
ТәртіппенMFA қосыңыз (егер әлі қосылмаған болса)
Пайдаланушыға кіріңізКелесі параметр үшін QueryString жасаңыз (бар болса)
АйлауЕгер токен жарамсыз болса
Егер тым көп әрекет болса# Электрондық поштаны (немесе мәтінді) жіберіңіз
Нысанды көрсетіңіз (алу үшін сұраулар үшін)Осы кодты қосқан кезде, электрондық поштаны жіберу үшін функцияны импорттаңыз. Файлдың жоғарғы жағында пайдаланушы (басқа импорттармен) көріністері (басқа импортталған), қосады
.MFA импорттауынан жіберіңіз
Енді бұл функцияны осы функцияның кез келгеніне дейін жазу керек. Ол біздің электрондық пошта функциясын кеңейтуі керек және пайдаланушыға растау кодымен электрондық хат жіберуі керек.Nano пайдаланушылары / MFA.PY
Def Send_verripation_email (пайдаланушы, токен): Ұзындығы = user.profile.profile.profile_code_length коды = Random.randint (Get_num_length (1, ұзындығы), Get_num_length (9, ұзындығы)); token.token = код Token.expires = timezone.now.now () + dateTime.timedelta (минут = settings.auth_valid_minutes) Token.save () send_html_email (пайдаланушы, {} үшін) {} {}, {}, {}, {}, {}. str (код), settings.site_name))
Сондықтан бәрі керемет жұмыс істейді, қазір бізде көп факторлы аутентификация жүйесі бар, бұл телефон нөміріне немесе электрондық поштаға кіруге болады. Бұлар спамер, роботтар немесе біздің жұмысымызды жақсы білдірмейтін кез-келген адам болуы мүмкін. Менің веб-сайттағы пайдаланушыларды бақылауға арналған көріністі қараңыз:# Импорт Django.contrib.auth.Decorators импорттаушы Django.contrib.auth.Decorators-тен user_passes_test импорттау .tests импорттан IS_SUPERUSER_OR_VENDOR # біз бұл сынақты құруымыз керек @login_required @user_passes_test (is_superuser_or_vendor) DEF пайдаланушылары (сұрау): # Пайдаланушылар тізімін алыңыз new_today = user.objects.filter (is_active = true, date_joined__GTE = TimeZone.now () - DateTime.timedelta (сағат = 24)). Санақ () New_this_month = user.objects.filter (is_active = true, date_joined__GTE = TimeZone.now () - DateTime.timedelta (сағат = 24 * 30)). Санақ () Жазылушылар = user.objects.filter (is_actact = true, profile__subscrible = true) .Count () қайтару Renter (сұрау, 'пайдаланушылар / users.html', {# {# қайтарушылар шаблонда «Тақырып»: «Барлық шоттар», 'Пайдаланушылар': user.objects.all (), 'new_today': New_today, 'new_this_month': new_this_month, 'Абоненттер': абоненттер })
импорт
Біз бұл сынақты құруымыз керекПайдаланушылар тізімін алыңыз
Пайдаланушыларды шаблонда қайтарыңыз
Осы Кодекстің сынақ қолданғанын ескеріңіз, біз бұл тестті тестілеуді және оны импорттауды жариялауымыз керек. Пайдаланушыларды / тестілерді өңдеу.def_superuser_or_vendor (пайдаланушы): User.profile.pendor немесе user.is_superuser
Бұл пайдаланушыларға / usels.html шаблонымен бірге, ол келесідей көрінеді:
{% extse.html '%} қолданылады
{% ampp_filters%}
{% блокталған мазмұн%}
Барлық тіркелген келушілер
{{New_today | nts | nts | капитализация}} Бүгін, {{new_this_month | nts}} Жаңа осы айда {{жазылушылар | nts}} жазылушылары, {{{ush} nts}} Барлығы.
{%} пайдаланушылар үшін%}
{% «пайдаланушылар / _User.html»%} кіреді
{% ENDFOR%}
{% EndBlock%}User.html. Субтиманы бар үлгіні қолданған кезде және ұзартқышты қолданбаған кезде, оның астын сызу үшін жақсы идея (
Бұл jinja көп екенін ескеріңіз, сізде осы айнымалылардың барлығы анықталмауы мүмкін. Бірақ бұл менің кодым сияқты. # {% ampp_filters%}
@ {{user.username}} - {{{user.profile.name}} ({{{{user.profile.prefile.preferred_name}}}}
Соңғы рет {{user.profile.last_seen | күні: «D D, Y»}}} {{{{user.profile.last_seen | Уақыт: «win: i»}}
{{User.profile.date_joved | күні: «{user.profile.date_joved | күні:« {}}} {}} {{user.profile.date_joved | уақыт: «h: i»}}
{{user.email}}
{% user.profile.phone_number%} {{{user.profile.phone_number}}}} {% Endif%}
{% user.verifications.last%}
'{{user.verifications.last.full_name}}' '
{{user.verifications.last.document_number}}}
{{user.verifications.last.birthdate}}
Идентификатор
Id кері
{% Endif%}
# {{user.id}}
{% user.profile.profile.profile%} жазылған} жазылған {%}%} жазылмаған {% Endif%}
{% kester.is_superuser%}
{% «пайдаланушылар / toggle_action.html»%}
{% Endif%}
{% Autoescape Off%}
{{user.bio}}
{% EntautoEscape%}
{% kes user.profile.profile.profile_verdified%} расталған пайдаланушы
{{user.id}} </ small>Бізге басқа Subtemplate, Toggle_active.html қажет. Бұл шаблон пайдаланушының белсенді екенін ауыстырып отыруға мүмкіндік беретін форма болуы керек.
{% user.is_active%} (%} {%} {%} {%} {% Endif%}Сондай-ақ, пайдаланушы әрекетін және тиісті URL үлгілерін ауыстырып қосуға арналған көріністі қосу қажет. Бізде болған кезде, бізге қажет болған жағдайда пайдаланушыны жою үшін көріністі қосамыз.
django.views.decorators.csrf.csrf-тен CSRF_EXEMT импорты @CSRF_EXEMT @login_required @user_passes_test (is_superuser_or_vendor) DEF ANGGLE_USER_ACTICE (сұрау, PK): Пайдаланушы = user.objects.get (id = pk) Егер сұрау.method == «Хабарлама»: User.isact = Пайдаланушы.is_acter емес User.save () eart httpresponse ('' Егер user.is_active esters] # Импорт django.contrib.auth.mistys-тен Loginrequiredmixin импорттау, UserPestesTmixin DJango.Views.Views.Views.Generic jEneric of deleteView Class UserDeleTeview (LogineRquiredMixin, UserSpessEnestMixin, DeleteView): Модель = пайдаланушы Subse_Url = '/' # Табыс URL мекенжайындағы қайта бағыттау def Get_context_data (өзін-өзі, ** кваргс): Мәтінмән = Super (). Get_Context_data (** kwargs) Қайтару мәтінмәні def test_func (өздігінен): # пайдаланушы SuperUser болса және жоюға рұқсаты бар болса, тест Пайдаланушы = self.get_object () Егер Self.Request.User! = Пайдаланушы және self.request.user.is_superuser: ШЫНДЫҚТЫ ҚАЙТАРУ FALSE қайтарыңызИмпорт
Табыс URL мекенжайы бойынша қайта бағыттау# Егер пайдаланушы SuperUser болса және жоюға рұқсаты болса
# Бұл қажет болған кезде, егер қажет болған кезде, пайдаланушыны жою көбіне қажет болмауы керек, егер біз оларды жұмыстан шығару қажет болса, сайтқа кіретін пайдаланушылардың көрінуін ауыстырып, біз оларды жұмыстан шығару керек болса.
# Біз қоштасқан URL үлгілері осындай көрінеді. Nano көмегімен пайдаланушыларды / URL мекен-жайларын өңдеңіз және осы жолдарды қосыңыз:
TimestampSigner().unsign(key, max_age=60 * settings.AUTH_VALID_MINUTES) # Nano пайдаланушылары / URLS.PY
Жолдар «]» пайдаланушы көріністеріндегі жолдар тізіміне өтуі керек, бірақ «[» басталғаннан кейін «[».# ... ('Пайдаланушы // жою /', userdetepieview.as_view (template_name = 'блог / «Блог / user_confirm_delete.html»), аты =' Жою-пайдаланушы '), жол ('пайдаланушы // белсенді /', views.toggle_user_acrion, name = 'ауыстырып қосу - пайдаланушы-белсенді'), # ...
...source venv/bin/activate
python manage.py makemigrations && python manage.py migrate
...Енді сіз оны веб-серверде жүктей алатындай етіп, сайттың сақтық көшірмесін жасаңыз. Пәрмен жолынан,
Судо сақтық көшірмесіҚазір біздің сайтымыз сақтық көшірмесін жасады.
Қазір бізде тағы бірнеше пайдалы мүмкіндіктер бар. Бірақ бұл жерде үлкен сурет ше? Бұл код әлі де Интернеттен қол жетімді емес, бізде әлі пошта сервері жоқ, бізде әлі де жеке-бірлеп беру процесін, сондай-ақ бізге артықшылықты пайдаланушыларды түпнұсқалығын растауға арналған қауіпсіз протоколдармен қатар, қосымша тексеру процесін, сондай-ақ бізге қосымшамызды кеңейту керек.# Біз мұның бәріне жетеміз. Ең бастысы, қазір бұл кодты онлайн режимінде алу, ол Ubuntu серверіндегі бірнеше жолмен ғана жасай аламыз. Егер сіз үйде серверіңіз болмаса, сізге серверді жалға алуыңыз керек, егер сізде порттарды ашуға мүмкіндік беретін Интернет жазылымы болмаса. Мен өзімнің жеке өз веб-сайтымды менің пәтерімде орнатамын, бірақ әдетте, виртуалды жеке серверді (VPS) жалға алу үшін әдетте әлдеқайда арзан.
if user and user.profile.can_login < timezone.now(): # Енді біз жұмыс істейтін код салыстырмалы түрде жұқа екенін есте сақтаңыз, бізде өнімді құруға дайын болғанға дейін оны сақтау керек. Интернет арқылы не істегеніңізге көз жеткізіңіз, егер сіз осы сайтты Linux серверіндегі Интернетке жалпыға ортақ пайдалансаңыз, веб-сайтыңызбен веб-сайтыңызбен қалаусыз әрекеттерді жасау жоспарыңыз бар. Бұл бірінші кезекте проблема болмайды, бірақ біз бұған қарсы күрес, соның ішінде машиналарды үйрену, жасанды интеллект және компьютерлік көру мәселелерін қарастырамыз. Бұл проблема болған кезде, осы мәтіннен ерітіндіге қараңыз.
# VPS жалдау тұрғысынан сіз баруға болатын жерлер көп. Google Clout VPS серверлері, Ионос, Камера, Amazon AWS және көбірек провайдерлер біздің қажеттіліктерімізге сәйкес келетін бұлтты сервер шешімдерін ұсынады.
return redirect(user.profile.create_auth_url()) # Сіз олардың пішіндерін басып, бастау үшін жоспарды таңдаңыз. Сіз кез-келген провайдермен негізгі жоспармен баруға болады, бірақ провайдер сізге электрондық поштаны жіберу үшін порт пошта серверінің порттарын ашуға мүмкіндік бере аласыз (бұл 587-порт және 25-портты), кейбір провайдерлер осы порттарды бұғаттайды. Осы уақытқа дейін мен Ионоспен және Камерада ең жақсы тәжірибемді, екеуі де шектеусіз электрондық поштаны жіберуге мүмкіндік береді, ал олардың бағасы өте арзан.
else: # Сіз жаңа серверге SSH немесе Secure Shell деп аталатын протоколға қосыласыз, бұл сізге дербес компьютеріңізбен жеке компьютерден, жеке компьютерден, дербес компьютерден интерфейске қосылады. Серверді орнатқан кезде, хостинг провайдері сізге SSH кілтін қосуды сұрайтын шығар, немесе олар сізге логин мен пароль береді. SSH кілті - кодты өңдеу үшін команда жолынан қалай кіретіндігіңіз. SSH батырмасын құру үшін төменде SSH-KEYGE параметрлерін пайдаланыңыз.
else: # ssh-keygen
user = User.objects.filter(username=username).first() # Файлды сақтап, қажет болса, оны қайта жазыңыз, егер сізде болмаса, SSH кілттерін бұру жақсы. Енді SSH батырмасын көру үшін келесі пәрменді пайдалануға болады. Сіз оны аутентификация үшін пайдалана алатындай, оны қашықтағы серверге көшіргіңіз келеді.
profile.can_login = timezone.now() + datetime.timedelta(seconds=15) # Мысық ~ / .ssh / id_rsa.pub
Егер сіз осы пәрменді терген кезде SSH кілтін көре алмасаңыз (SSH-RSA AAA »), RSA кілтін (олар қауіпсіз) rsa пернесін құрыңыз (олар қауіпсіз, сондықтан мен оларды қолдануға кеңес беремін.) Келесі код 4096 биттік RSA SSH кілтін жасайды.SSH-KEYEN -t -t RSA -B -B 4096
Ubuntu жұмыс істейтін VPS жасаңыз, бірақ сіз мұны жоспарлайсыз. Сіз VPS жасаған болсаңыз, провайдерлер веб-сайтында (kamatera.com, iOnos.com немесе ұқсас) сіз кіргіңіз келеді. Мұны істеу үшін сіз IP мекенжайыңызбен SSH пәрменін (xx.xx.xx.xx) пайдаланыңыз. Сондай-ақ, біз жасаған сервердегі әдепкі логинге, мысалы, ubuntu-ға сезімтал болуыңыз керек.ssh ubuntu@xx.xx.xx.xx
Сізден құпия сөз сұралуы мүмкін, егер сізден сұраныс сұралса, оны енгізіңіз. Біз оны енгізіңіз. Біз әдепкі пайдаланушы атын пайдаланбаймыз, сондықтан жаңа пайдаланушыны құру және олардың тіркелгілеріне SSH батырмасын қосу арқылы бастайық.nano users/sms.py
Жаңа SSHD_CONFIG файлын қосу арқылы бастайық, ол серверді SSH қалай пайдалану керектігін айтады.# nano sshd_config
# # Бұл SSHD Server жүйелік жүйелік конфигурация файлы. Көру
Қосымша ақпарат алу үшін # sshd_config (5).
# SSHD жолмен = / USR / жергілікті / SBIN: / USR / жергілікті / Сбин: / USR / SBIN: / usr / sbin: / sbin: / sbin: / bin: / usr / Ойындар
# Әдепкі SSHD_CONFIG-дегі параметрлер үшін қолданылатын стратегия
# OpenSsh - әдепкі мәнімен опцияларды көрсету
# мүмкін, бірақ оларды түсініктеме қалдырыңыз. Топпаланбаған опцияларды ауыстырады
# Әдепкі мән.
#Port 22
#Dressfamily кез келген
#Listenaddress 0.0.0.0
#Listenaddress ::
#Hostkey / etc / ssh / ssh / ssh_host_rsa_key
#Hostkey / etc / ssh / ssh / ssh_host_ecdsa_key_Key
#Hostkey / etc / ssh / ssh / ssh / ssh_host_ed2519_Key
# Шифрлар және кілттер
#Rekeylimit әдепкі жоқ
# Журнал жүргізу
#Syslogfacyility fate
#Lotevel info
# Аутентификация:
#Logingracetime 2m
#Permitrootlogin тыйым салу-пароль
#Strictmodes иә
#Maxauthtries 6
#Maxsestions 10
PubkeyAuthentication иә
# Күтеді
Gulverkeysfile .ssh / ustrated_keys .ssh / ustard_keys2
# ЕверотталғанPRIPALSFILE Ешқайсысы жоқ
# ЕвоТоридкецескомдар
# ЕвоТордантқа қосымшалар
# Бұл үшін жұмыс істеу үшін сізге / etc / ssh / ssh / ssh_khosts-та хост пернелері қажет болады
#Hostbasedauthentication жоқ
# Өзгеріске өзгертіңіз, егер сіз (/ .ssh / белгілі_хосттарға сенбесеңіз
# Хост-кардиоттар
#IgnoreUserKosts жоқ
# Пайдаланушының ~ / .rhhosts және ~ / .host файлдарын оқымаңыз
#Ignorerhosts иә
# Туннельді таза мәтіндік құпия сөздерді өшіру үшін мұнда жоқ өзгертіңіз!
Құпия сөз жоқ
#Permitmpasswords жоқ
# Challence-жауап паролін қосу үшін Иә
# кейбір пам модульдері мен жіптер)
KBDININTINTIONVEATERY
# Керберос опциялары
#KerberosAuthentication жоқ
#Kerberosorlocalpaswd иә
#KerberberosticketCleanup иә
#Kerberosgetafstoken Жоқ
# Gssapi опциялары
#Gssapiauthentication жоқ
#Gssapicleanupcredenties Иә
#Gssssssssssssapistrict acceptorchecch иә
#Gssapikeyexchange Жоқ
# Мұны PAM аутентификациясын, есептік жазбаны өңдеуді қосу үшін оны «Иә» күйіне орнатыңыз.
# және сеансты өңдеу. Егер бұл қосылған болса, PAM аутентификациясы болады
# kbdinteractIneweAuthentication арқылы рұқсат етіңіз
# Құпия сөзбен қарау. PAM конфигурациясына байланысты,
# PAM аутентификациясы KBDININTERCTIVERAITION арқылы таратылуы мүмкін
# «Парольсіз PerioTrootlogin» параметрі.
# Егер сіз тек PAM есептік жазбасын және сеанстың есептік жазбасын тексергіңіз келсе
# PAM аутентификациясы, содан кейін оны қосыңыз, бірақ құпия сөзбен орнатыңыз
# және kbdinteractIneweAthentically 'жоқ'.
Usepam иә
#AllowAgentForwarding иә
#AllowTCPORWRANDING иә
#Gatewayports жоқ
X11forwarding иә
# X11displayoffset 10
# X11uselocalhost иә
#Permittty иә
PrintMotd жоқ
#PrintLastlog иә
#Tcpepalive иә
#Permituserenvironment Жоқ
# КҮНІ КҮНІ
#ClientalItervalval 0
#ClientaliveCountMax 3
# Жоқ
#Pidfile /run/sshd.pid
#Maxstartups 10: 30: 100
#Permittunnel жоқ
#Chrootdirectory Ешқайсысы
#Verionaddendum жоқ
# әдепкі баннер жолы жоқ
Баннер / т.б / баннер
# Клиенттің жергілікті ортаға айнымалы мәндерді жіберуге рұқсат етіңіз
AchseNv lang lc_ *
# Шағын жүйелердің дефолтының әдепкі мәні
SFTP / USR / Lib / SFTP-сервердің ішкі жүйесі /
# Әр пайдаланушы негізінде параметрлерді болдырмау мысалы
#Match пайдаланушысы AnonCV
# X11forwarding жоқ
# Allowtcporarding жоқ
# Permittty жоқ
# Forcecomand CVS сервері
Perotrootlogin жоқ
# Бұл SSHD Server жүйелік жүйелік конфигурация файлы. Көру
# Қосымша ақпарат алу үшін SSHD_CONFIG (5).
# Бұл SSHD жолмен = / USR / жергілікті / SBIN: / USR / жергілікті / Сбин: / USR / SBIN: / usr / sbin: / sbin: / sbin: / bin: / usr / Ойындар
# Әдепкі SSHD_CONFIG-дегі параметрлер үшін қолданылатын стратегия
# OPENSSH - бұл әдепкі мәндерімен опцияларды көрсету
мүмкін, бірақ оларды түсініктеме қалдырыңыз. Топпаланбаған опцияларды ауыстырадыӘдепкі мән.
22-порт# Кез-келген адам мекен-жайы
AUTH_VALID_MINUTES = 3 # Тыныштқылдар 0.0.0.0
Тыңдаушылар ::HostKey / etc / ssh / ssh / ssh_host_rsa_key
HostKey / etc / ssh / ssh / ssh_host_ecdsa_key# HostKey / etc / ssh / ssh / ssh_host_ed2519_Key
# Сиптерлер және кілттер
# ReceylImit әдепкі жоқ
Журнал жүргізуSyslogFacycy Fame
Loglevel info# Аутентификация:
LogingRacetime 2MPerotorotlogin тыйым салуға тыйым салынады
Стритмодтар иәnano users/templates/users/mfa.html
МаксАвтралар 6Максимум 10
Болашақ / уәкілетті_KEYS2 Болашақта әдепкі бойынша ескерілмейді.
DownlodPRIPALSFile ЕшқайсысыGultskeysCommand Ешқайсысы
Gultkeyscommanduser Ешкімnano users/templates/users/mfa_onboarding.html
Бұл үшін жұмыс істеу үшін сізге HOST пернелері / SSH / SSH / SSH_KHOSTS қажет боладыHostBasedAuthentication жоқ
Егер сіз (/ .ssh / белгілі_hosts) сенбесеңіз, иә өзгертіңіз
HostbaseDauthentationNemberneSuNeHosts жоқ
Пайдаланушының ~ / .rhhosts және ~ / .host файлдарын оқымаңызИӘ ИӘ
Туннельді таза мәтіндік парольдерді өшіру үшін мұнда жоққа өзгертіңіз!Мүмкіндік жоқ
Challence-Recele құпия сөздерін қосу үшін Иә# кейбір PAM модульдері мен жіптер)
Керберос опцияларыKerberosauthentication жоқ
Kerberosorlocalpaswd иә# KerberosticketCleanup иә
KerberosGetaFstoken ЖоқGssapi опциялары
Gssapiauthentication жоқnano users/templates/users/profile.html
Gssapicleanupcredents иә
Gssapistrictaceptorcheck иәGssapikeyexchange жоқ
PAM түпнұсқалық растамасын, есептік жазбаны өңдеуді қосу үшін, «Иә» күйіне орнатыңыз,және сеансты өңдеу. Егер бұл қосылған болса, PAM аутентификациясы болады
KBDININTINTINTIONVEATION арқылы рұқсат етіңіз және# Құпия сөз. PAM конфигурациясына байланысты,
# KBDININTERCTIVERAETION арқылы PAM аутентификациясы айналып өтуі мүмкін
«Парольсіз Periotrootlogin» параметрі.Егер сіз тек PAM есептік жазбасын және сеанстың есептік жазбасын қаласаңыз
PAM аутентификациясы, содан кейін оны қосып, құпия сөзбен орнатыңызbackup
және KBDININTIONVEATION.Authenticlement 'жоқ'.Иә
Allattcporarding иәpython manage.py runserver localhost:8000
Шлюздер жоқX11displayoffset 10
X111uselocalhost иәPramitty иә
PrintLastlog иәTCPKeepalive иә
Мүмкіндік жоқСығымдау кешіктірілді
Клиенттіктер 0CutryAliveCountMax 3
Жоқpython manage.py startapp errors
Pidfile /run/sshd.pidМаксимум 10: 30: 100
Permittunnel жоқhandler404 = 'errors.views.handler404'
handler500 = 'errors.views.handler500'
handler403 = 'errors.views.handler403'
Chrootdirectory noneVersionaddendum Ешқайсысы
Әдепкі баннер жолы жоқ# Клиенттің тілдік ортасын өзгертуге рұқсат етіңіз
Шағын жүйелердің дефолтын жоққа шығарыңызӘр пайдаланушы негізінде параметрлерді болдырмау мысалы
AnonCV қолданушыға сәйкестік # X11forwarding жоқ
Allowtcporarding жоқPermittty жоқ
Forcecommand CVS серверіfrom threading import local
import traceback
from django.utils.deprecation import MiddlewareMixin
_error = local()
class ExceptionVerboseMiddleware(MiddlewareMixin):
def process_exception(self, request, exception):
_error.value = traceback.format_exc()
def get_current_exception():
try:
return _error.value
except AttributeError:
return None
def set_current_exception(exception):
try:
_error.value = exception
except AttributeError:
print('Attribute error setting exception.')
Есіңізде болсын, файлды сақтау үшін Ctrl + x және y. Әрі қарай, инициализация деп аталатын негізгі сценарий жазайық (барлығы біздің пайдаланушымыздың үй каталогында).nano инициализациялау
Сіз мысықтың көмегімен табылған SSH кілтінімен. (.ssh / id_rsa.pub)nano errors/templates/errors/error.html
#! / bin / bash
sudo apt орнату - yi nano git openssh-сервер
sudo cp sshd_config / etc / ssh / sshd_config
SUDO Service SSH қайта іске қосыңыз
Sudo Service SSHD қайта іске қосыңыз
ECHO «/OOT/.SSH/ID_RSA» | sudo su root op «ssh-keygen -t '' ''
ECHO «RUNT SSH кілті:»
sudo su rou root -c «Cat /Oot/.ssh/id_rsa.pub»
Sudo AddUser --disabled-password --Gecos «» командасы
sudo passwd -d командасы
Судо usermod -ag sudo командасы
Echo «/Home/team/.Ssh/D_RSA» | «SSH-KEYEN -t -t -D -N -N -N -N -N -N -N»
cat /home/team/.ssh/id_rssa.pub >> /home/team/.SSSSSSH /authorized_KEYS
echo '' '>> /home/team/.SSH/auth/Authorized_KEYS
ECHO «SSH командасы:»
мысық /home/team/.Ssh/id_rsa.pub
! / bin / bashОсы файл арқылы сізбен жүру үшін, жолға жолға қарай бастайық. Бірінші жол құрастырушыға бұл Bash сценарийі екенін айтады. Содан кейін біз тәуелділіктерді орнатамыз, SSHD_CONFIG-ті дұрыс каталогқа, түбірге қайта іске қосып, генерлеп, пайдаланушының «командасын» қосу (сіз өзіңіз қалаған атыңызды таңдай аласыз). Сондай-ақ, біз Sudo Group-қа команданы қосып, SSH кілтін жасаңыз, уәкілетті кілттер мен олардың кілтін және олардың кілтін басып шығарамыз. Бұл жаңа пайдаланушы сайтқа қалай кіретін болады.
Жаңа терминалда алға және серверді қайтадан ашыңыз.nano app/settings.py
ssh team@xx.xx.xx.xxБұл жолы SSH батырмасы болғандықтан, бұл жолы құпия сөз қажет болмауы керек. Сондай-ақ, сайтты қауіпсіз сақтау үшін біз парольмен логинмен логинді ажыратыңыз.
Енді бұл сервер толық ақпаратты толығымен бастайды. Біздің жобаны GIT-тен Clonding-ден жинай бастайық, сондықтан біз оны қашықтағы құрылғыда жүктей және іске қоса аламыз. SSH арқылы қосылған қашықтағы серверде алдымен SSH кілтін басып шығарыңыз:DEBUG = False
Мысық ~ / .ssh / id_rsa.pubӘрі қарай, осы пернені біздің git репозиторийін орнатпас бұрын біз жасаған əндік параметрлерге қойыңыз. Енді біз өз жобамызды тікелей серверге толық клондауымыз мүмкін. Жүктеу үшін алдымен жобаны іске қосқаныңызға көз жеткізіңіз.
GIT Clone Git: //github.com/you/yourproject.gitsudo backup
Мінсіз. Қазір барлық файлдар осында. Біз оларды ls-пен көре аламызls
Енді, серверді орнатуды бастайық. Алдымен, жобалық каталогыңызды біз жоба үшін пайдаланатын қарапайым, есте сақтайтын атаумен көшіріңіз.cp -rЖ заңыңыз
Мұнда «WhatyouCalledit» сіздің жобаңыздың жаңа атауы болып табылады. Әрі қарай, біз серверді орнату үшін негізгі қызметтік бағдарламаны құруымыз керек. Біз бұл қызметтік бағдарламаны сақтап, оны болашақта пайдаланамыз. Бұл қызметтік бағдарламаны құру үшін, сценарийді қалай өңдейтінімізді анықтау үшін пайдаланушы екілік жасайық. Баш, өңдеу / USR / BON / ASCRIPT пайдалануnano users/models.py
Sudo Nano / USR / BON / ASCRIPTСізде файлды өңдеуге рұқсатыңыз бар, сондықтан сізде судо қолданғаныңызға көз жеткізіңіз. Файлда келесі жолдарды қосыңыз:
#! / bin / bash Егер [! -F / usr / bin / $ 1]; содан кейін sudo touch / usr / bin / bin / $ 1 ECHO «#! / bin / bash» >> / usr / bin / bin / $ 1 sudo cmmod a + x / usr / bin / bin / $ 1 Судо NANO / USR / BIN / $ 1 echo $ 1 | Sudo Tee -a / etc / Ascripts тағы sudo cmmod a + x / usr / bin / bin / $ 1 Судо NANO / USR / BIN / $ 1 жүзім# ! / bin / bash
! / bin / bash «>> / usr / bin / $ 1Есіңізде болсын, бұл сценарий дәлелді, сценарий атауын $ 1 ретінде қабылдайды. Алдымен ол файлдың бар-жоғын тексереді немесе оны басқаша түрде тексереді, сценарийдің бішіні, оның рұқсаттарын өзгертеді, оның рұқсаттарын өзгертеді және біз жасап жатқан сценарийлердің аттарын сақтауға мүмкіндік береді. Егер файл бұрыннан бар болса, жай рұқсаттарды өзгертіңіз және оны өңдеңіз. Файлды сақтаңыз, содан кейін келесі рұқсаттарды өзгертеміз. Осы сценарийді қолданған кезде, біз бұған қайта істеуіміз керек емес.
Sudo Chmod a + x / usr / bin / bin / bin / ascript vendor = models.BooleanField(default=False)
Мінсіз. Енді орнату деп аталатын сценарий жасайық. Біріншіден, сізден артық емес, бірақ менің орнату сценарийім сияқты көріну. Біз осы сценарийдің сіздің жобаңыздағы қандай болатынын өтейміз, сізге сценарийден бастау керек.#! / bin / bash Секунд = 0 Python_version = 3.12 Эхо «FEMMebabe Installer инициализациялады.» # sudo cmmod a + x сценарийлері / usersetup # ./scripts/Usersetup # ssh-keygen # Жоба анықтамалығы Dir = «/ үй / команда / фембебабе» Пайдаланушы = «Команда» # Журнал командалары «Тіркеу командалары» жаңғырығы sudo cp log / commands.log / var/log/commands.log sudo chmod -r a + w / var / log Sudo Chown -r: syslog / var / log Echo $ «Alias venv =» көзі / үй / команда / команда / ФемеБабе / Венв / БСН / Іске қосу «| sudo tee -a /home/team/.profile Echo $ «Twnew_Command = \ 'RELLN_VAL = $ ?; Logger-ply6.debug» $ (whostry6.debug »$ ($$] \ ^ [] (0-9] \ + [] [0-9] \ + []« \/ »)« \ ») sudo tee -a / etc / bashrc Echo $ «Twnew_Command = \ 'RELLN_VAL = $ ?; Logger-ply6.debug» $ (whostry6.debug »$ ($$] \ ^ [] (0-9] \ + [] [0-9] \ + []« \/ »)« \ ») sudo tee -a --A «/Home/Team/.Bashrc» Echo $ «Twnew_Command = \ 'RELLN_VAL = $ ?; Logger-ply6.debug» $ (whostry6.debug »$ ($$] \ ^ [] (0-9] \ + [] [0-9] \ + []« \/ »)« \ ») sudo tee -a -a -a -a ofroot/.bashrc ECHO «Source / ETC / Bashrc» | sudo tee -a /home/team/.profile Эхо «/var/log/commands.log» | sudo tee -a -a /etc/logrotate.d/syslog ECHO «Жергілікті6. * /Вар/log/commands.log» | sudo tee -a --A «/etc/rsyslog.d/bash.conf» Sudo Service Rsyslog Restart # Нано конфигурациясы ECHO «Таблингін орнатыңыз 4» >> .nanorc ECHO «Табиғат тақталары» >> .nanorc # Git config ECHO «GIT конфигурациясы» sudo git config --global user.email .email .email «Jasper.camber.camber.holon@gmail.com» && sudo git config --Global user.name «Jasper Holton» git config ushobal user.email «Jasper.camber.holon@gmail.com» git config --global user.name «Жаспер Холтон» git config - global --Add Sail.Directory $ «$ Dir» Sudo Ssh-Keyscan -t rsa gitlab.com | sudo tee -a -a -a -a /.ssh/nown_hountssh Sudo Ssh-Keyscan -t -t rsa github.com | sudo tee -a -a -a -a /.ssh/nown_hountssh ECHO «Орнатуды орнату» Sudo Mount -o - Recount, Size = 16G, Exec / TMP # Жаңарту және орнату «Пакеттерді жаңарту және орнату» жаңғырығы Sudo Apt жаңарту және && судо Sudo Apt Pustgresql-Client-14 Postgresql-Client-Common Client-commentgresql-command-command-command-admptgresql-classml-mastgresql-yi ECHO «Постфикс Постфикс / mailname strite fonmmebabe.com» | Sudo debconf-Set-Sets ECHO «Постфикс / Main_Mailer_tyer_type string» «Интернет-сайт» | Sudo debconf-Set-Sets sudo esourrestart_mode = abian_frontend = Interoctions APT орнатылмаған APT орнатылмаған sudo estoestart_mode = APT орнату - rkhunter ramav-daemon libx264-devx264-mod-wsgi-wsgi-wsgi-python3-python3-python3-pithon3-pip pip pip pip pip python3-django teseract-ocr Openjdk-8-JDK Redis-server libopencv-dev python3-opencv python3-devsasl2-devEd-impendkim-pop3d dovecot-imapd-pop Python3-Apache Apache echo »- Шығу, әрқашан -F ARC = B64 -F euid = 0s eectve '| sudo tee -a -a /etc/audit/audit.rulles echo »- Шығу, әрқашан -F ARC = B32 -F euid = 0s eectve '| sudo tee -a -a /etc/audit/audit.rulles # Кламав Вирусқа қосу Эхо «Антивирусты бастау» Sudo SystechCtl Кламав-демонды қосыңыз Sudo SystechCtl Clamav-Daemon бастаңыз # Хост атауын орнатыңыз «127.0.0.1 Феммебабе» жаңғырығы | sudo tee -a / etc / хосттар Sudo Hostnamectl Set-hostname locallhost # Postgres ECHO «Postgres Setup» Sudo -u Postgres PSQL -U POSTGRES -C «Деректер базасының дерекқоры;» Sudo -u Postgres PSQL -U PSQL -U «Деректер базасын құру;» sudo -u psql psql -u psql -u «Пошталардан кейінгі парольмен парольмен парольмен жасаңыз»; « Sudo -u Postgres PSQL -U POSTGRES -C «DJango-ді« UTF8 »-ге« DJango Roster »рөлі; sudo -u psql-psql-psql-cost overgres -c «All Django Django Set Default_transaction_isolation 'entuld's;» sudo -u psql-psql-mu psql-mc «Django Set Django TimeZone-ға« UTC » Sudo -u Posgres PSQL -U PSQL -U «Деректер базасының Деректер базасындағы барлық артықшылықтарды django-ға беру;» # Дерекқорды орнату Эхо «Сақтық көшірме жасаудан дерекқорды құру, бұл біраз уақыт кетуі мүмкін». мысық db.json. ?? > db.json echo «Брандмауэрді теңшеу» Sudo UFW әдепкі мәні шығуға рұқсат етіңіз Sudo UFW әдепкі Судо UFW рұқсат 22 Судо UFW http рұқсат етіңіз Судо UFW HTTPS-ке рұқсат етіңіз Судо UFW «Постфикс» рұқсат етіңіз Sudo UFW «SMTPS постфиксі» рұқсат етіңіз Sudo UFW «Постмс жіберу» рұқсат етіңіз Судо UFW 'Dovecot Pop3' рұқсат етіңіз Судо UFW 'Dovecot Secure Pop3' рұқсат етіңіз Судо UFW 110 / TCP рұқсат етіңіз Судо UFW рұқсат етіңіз 25 / TCP Эхо «Y» | Sudo UFW қосу # Иптабельдерді өшіріңіз echo «Брандмауэрді теңшеу» Судо иптондар -P енгізу Судо иптондар -П Sudo keptles-reptands-ші Судо иптондар -f Судо иптастар # Bitdefender орнатыңыз CD $ Dir ECHO «BitDefender Antivirus Installer» https://cloud.gravityzone.bitddefender.com/packages/nix/0/7atssy/setup_downloader.tar mkdir bitdefender tar -xf setup_downloader.tar -c Bitdefender sudo rm setup_downloader.tar Sed -i -e -E-{linkpasswd / z & a; * 3bpd_qbgums / g 'bitdefender / installer Sudo Chmod A + X Bitdefender / Installer sudo ./bitdefender/installer # Орнату постфиксі CD $ Dir «Пошта қызметтерінің конфигурациясы» жаңғырығы судо/etc/postfix/main.cf /etc/postfix/main.cf.backup sudo cp config / etc_postfix_main.cf /etc/postfix/main.cf sudo cp config / etc_postfix_master.cf /etc/postfix/master.cf sudo cp config / etc_default_opendkim / etc / default / OpenDkim sudo cp config / etc_dovecot_conf.d_10-auth.conf /etc/dovecot/conf.d/10-auth.conf sudo cp config / etc_dovecot_conf.d_10-master.conf /etc/dovecot/conf.d/10-master.conf sudo cp config / etc_dovecot_dovecot.conf /etc/dovecot/dovecot.conf sudo cp config / etc_dovecot_passwd / etc / dovecot / passwd sudo cp config / etc_opendkim.conf /etc/opendkim.conf sudo cp config / etc_default_opendkim / etc / default / OpenDkim Sudo Adduser постфиксі OpenDkim Sudo Mkdir / etc / OpenDkim Sudo Mkdir / ETC / OpenDkim / Keys Судо MKDir /ETC/opendkim/Keys/femMebabe.com Sudo Mkdir / Var / SPOOL / PostFix / OpenDkim sudo echo »*@femmebabe.com sendonly._domainkey.femmebababe.com | sudo tee -a -a /etc/opendkim/signing.table Судо жаңғырығы «Sendonly._DomaNey.FemMeBababe.com fonmmebababe.com/sEndonly:/etc/opendkim/keys/femmebababababe.com/sendonly.private» | sudo tee -a -a /etc/opendkim/Key.Table Судо жаңғырығы «127.0.0.1» | sudo tee -a -a /etc/opendkim/trusted.hosts Судо жаңғырығы «Localhost» | sudo tee -a -a /etc/opendkim/trusted.hosts Судо жаңғырығы «» | sudo tee -a -a /etc/opendkim/trusted.hosts Судо жаңғырығы «* .femmebabe.com» | sudo tee -a -a /etc/opendkim/trusted.hosts Sudo Chown -r OpenDkim: OpenDkim / etc / OpenDkim Sudo Opendkim-genkey -B -B -B -B 2048 -D fonmebabe.com -d -d /etc/opendkim/femmebababe.com-es sendonly -v Sudo Chmod Go-RW / ETC / OpenDkim / Keys Судо Чаун Опендким: OpenDkim /etc/opendkim/kyys/femmebababe.com/sendonly.private Sudo Chown OpenDkim: ПоштаFix / var / SPOOL / Postfix / OpenDkim CD $ Dir Sudo CP пошта жәшігі / * / var / mail / Судо Чоун: Пайдаланушылар / var / mail / * sudo chmod -r a + rwx / var / mail / * Sudo SystemCTL OpenDkim Postfix DoveCot # Директтер жасаңыз CD $ Dir MKDIR Media / Audio MKDIR Media / Audio / Саусақ іздері MKDIR Media / Security mkdir медиа / қауіпсіз MKDIR Media / Қауіпсіз / БАҚ MKDIR Media / Secure / Video mkdir медиа / қауіпсіз / профилі MKDIR Media / Secure / Бет MKDIR Media / Суреттер mkdir медиа / Live MKDIR Media / Live / Files MKDIR Media / Live / Carrys mkdir медиа / файлдары mkdir temp mkdir temp / мәліметтер Mkdir Temp / Gfpgan mkdir mail / кіріс жәшігі MKDIR пошта жәшігі # Virtualenv орнату CD $ Dir «Виртуалды ортаны құру» жаңғырығы Питон -М Венв Венв Venv / Bin / Activate көзі # Табыс және тәуелділіктер Жаңғырық «Тұру және құрылыс тәуелсіздігі, бұл вейкке түсіруі мүмкін» CD $ Dir GIT клоны https://github.com/sukhitashvili/violence-Detection.Git cp config / vd-qitors.txt Бекітіру CP Config / vd-model.py CD-мен зорлық-зомбылықты анықтау PIP3 Install ritor.txt CD $ Dir https://github.com/tencentarc/gfpgan/reliss/download/v1.3.0/gfpgfpgenw1.3.3pth -p эксперименттері / Pretrained_models GIT клоны https://github.com/tencentarc/gfpgan.git GIT Clone https://github.com/davisking/dlib.git CD DLIB MKDir құрды; CD құрастыру; Cmake ..; Cmake - бум. cd .. Venv / Bin / Activate көзі Python Setup.py орнату CD $ Dir Venv / Bin / Activate көзі CD $ Dir / Gfpgan / «Питон тәуелдестерін орнату» жаңғырығы PIP орнату негіздері Finxlib PIP орнатыңыз PIP орнату -R талаптары.txt Python Setup.py дамыту RERERERGAN PIP орнату CD $ Dir Судо Човно - команда: Пайдаланушылар gfpgan «TA-LIB орнату» жаңғырығы https://prwnoads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.gz Xvzf TA-LiB-0.4.0-SRC.GZ Судо RM TA-Lib- * CD TA-LIB Судо ./Configure Судо жасау Судо орнатыңыз # Брандмауэр ережелерін орнатыңыз CD $ Dir # PYPI тәуелділіктерін орнатыңыз ECHO «Қалған питалық тәуелділіктерді орнату (бұл біраз уақыт кетуі мүмкін)» Sudo SystechCtl маскасы Tmp.Mount CD $ Dir Venv / Bin / Activate көзі PIP3 орнату - «Балдыркөк [Redis]» PIP3 Installs in tents.txt - пайдалану -use-enpreated = lexacy-resolver --use-resolver --use-hep517 PIP3 орнату - opencv-python # == 4.5.4.60 PIP3 орнату - OpenCL-SCRECT-Python # == 4.5.4.60 #pip opencv-python орнату == 4.5.5.64 #PIP орнату OpenCL-CRECTIB-Python == 4.5.5.64 PIP3 орнату - OpenCV-Python-бассыз PIP3 арналарды жойыңыз PIP3 Дафнаны жою PIP3 Арналарды орнату [«Дафна»] PIP3 Жастықты орнатыңыз == 9.5.0 PIP3 Librosa орнатыңыз PIP3 install -u -u 'бұралған [TLS, Http2]' PIP3 орнату - URLIB3 сұраныстары urlib3 сұраныстары urlib3 numpy oauthlib бұралған пижвт-бұралған Pyjwt SQLPSE Astral Webauthn Astral WebAuthn Docbarcodes PDF417 Deech-Dir PIP3 Tensorflow орнату == 2.15.1 # Attrbott орнатыңыз «Сертификаттарды орнату» жаңғырығы Sudo Snap Install; Sudo Snap Refresh Core Sudo Snap Install - классикалық анықтамалық Sudo Ln -s / Snap / Bin / Certbot / USR / BON / CERTBOT Sudo Snap Redis орнатыңыз Sudo SystemCtl Apache2 қосыңыз Sudo SystemCtl Apache2 іске қосыңыз2 # Жартығын іске қосыңыз Sudo Choterbot --aPache --NONTORE-TOSACTIOS - ARMMebabe.com - Ammebababe.com --Mail Jasper.camber.camber.holon@gmail.com # Пошта серверін қайта жүктеу Sudo SystemCTL OpenDkim Postfix DoveCot # CERT көшірмесі #sudo cp /etc/letsencrypt/Live/femmebabe.com/privke.pem prceme.pem #sudo cp /etc/letsencrypt/live/femmebabe.com/cert.pemh Венв CP сценарийлері / мазмұн. CP сценарийлері / pwa_webush_forms.py $ «/ good / comment / venv / lib / python $ {python_version} /site-packages/pwa_weebpackages/pwa_weebush/forms.py» CP сценарийлері / Webauth_Views.PY $ «/ HOME / TEAM / FEMBABE / VENV / LIB / Python $ {python_version} /site-packages/webe-packages.py» CP сценарийлері / json.py $ «venv / lib / python $ {Python_version} /site-packages/django/core/serializes/json.py» # Пайдаланушы параметрлерін орнатыңыз Sudo Gaspwd -a wwwwwwwer пайдаланушылары # Рұқсаттар орнатыңыз ECHO «Рұқсаттарды орнату» Судо Чоун -р командасы: Пайдаланушылардың кэші / sudo chmod a + rwx -r кэш / #sudo choWn -r командасы: Пайдаланушылар / var / run / #sudo chown түбірі: түбір / жүгіру / судо / ЦС -Р Sudo Chown -r Redis: Redis / Var / Lib / Redis Sudo Chown -r Redis: Redis / var / log / Redis Sudo Chmod -r u + rwx, g + rwx, u + rx / var / log / log / radis Sudo Chmod + r /ETC/redis/redis.conf Судо Чоун -р командасы: Пайдаланушылар / var / log / Судо ЧОНС: Пайдаланушылар ./. sudo chmod -r g + rwx ./ sudo chmod -r g + rx ../. sudo chmod -r g-rwx ../.ssh sudo chmod 774 ./ #sudo chmod 664 db.sqlite3 #sudo chound www-data: пайдаланушылар db.sqlite3 Судо Чоун -р WWW-деректер: www-data media / Судо Чоун WWW-DATA: пайдаланушылар ./ Судо Чоун -р Команда: Пайдаланушылар медиа / Судо Чоун -р командасы: пайдаланушылар ./ Судо Чоун -р командасы: пайдаланушылар ./gfpgan/ Судо Чоун -р командасы: пайдаланушылар ./temp/ Sudo Chmod A + R Team / var / var / mail / $ пайдаланушы # Config және рұқсаттарды орнату ECHO «Қалған қызметтерді теңшеу» sudo cp config / apis.json /etc/apis.json sudo cp config / config.json /etc/config.json sudo cp config / fongmebabe-le-ssl.conf /etc/apache2/sites- арматура- арматура-femmebababe-le-ssl.conf sudo cp config / etc_dovecot_passwd / etc / dovecot / passwd sudo cp config / etc_init.d_cely /etc/init.d/cely sudo cp config / etc_init.d_celemybate /etc/init.d/celemerybeat sudo cp config / etc_default_dermy etrybeal sudo cp config / etc_default_kz Sudo CP Config / etc_systemd_systemd_system_system.Service.service /etc/systemd/system/System/daphne.Service Sudo CP Config / etc_systemd_system_sely.sely.syrervice /etc/systemd/systemd/System/Cely.Service.Service Sudo CP Config / etc_systemd_systemd_selymybate.service /etc/systemd/system/seleryBeal.Service sudo chmod a + x /etc/init.d/cely sudo chmod a + x /etc/init.d/celemerybeat # Орнату дерекқоры ECHO «Тасымалдау, бұл тез болуы керек» Python.py.py Makemigrations Python.Py.py.py migrate --run-syncdb ECHO «Деректерді жүктеу, бұл біраз уақыт алуы мүмкін» Python.py.py oilddata db.json «Setup Crontab / Sudoers конфигурациясы» жаңғырығы Sudo Crontab -L -u тамыры | Cat - Config / Crontab | Sudo Crontab -u түбірі - Sudo SH -C «Cat Config / Sudoers >> / sudoers» # Pam конфигурациясын енгізіп, ақаулы SSH конфигурасын алыңыз #sudo sed -i '' - '$ d' /etc/pam.d/sshd #sudo sed -i '' - '$ d' / etc / profile ECHO «Сеанс Pam_exec.so setueuid /home/team/femmebabe/femmebabe/fem.sh» | sudo tee -a -a /etc/pam.d/sshd Эхо «Сеанс PAM_EXEC.SO SETEUEUD /Home/Team/femMeBabe/logout.sh» сеансы sudo tee -a -a /etc/pam.d/sshd sudo chmod a + x pam.sh sudo rm /etc/ssh/sshd_config.d/50-cloud-init.conf # Көшірме сценарийлері және рұқсаттарды орнатыңыз «Сценарийлерді көшіру» жаңғырығы Sudo CP сценарийлері / қайта жүктеу / USR / BIN / Sudo CP сценарийлері / тексеру / USR / BBON / Sudo CP Scriptes / Enagpu / USR / BIN / Sudo CP сценарийлері / rickpu / usr / bin / Sudo CP Scriptes / Activate / USR / bin / Sudo CP сценарийлері / Сақтық көшірме / USR / BIN / Sudo CP сценарийлері / Ascript / USR / BIN / Sudo CP Scriptes / Setup / USR / BIN / Sudo CP Scriptes / AddSetup / USR / BIN / Sudo CP сценарийлері / Көру тізімдері / USR / BIN / Sudo CP Scriptes / Logs / USR / BIN / Sudo CP сценарийлері / CMDS / USR / BBON / Sudo CP Scriptes / Setup / USR / BIN / Sudo CP Scriptes / PushWeb / USR / BIN / Sudo CP сценарийлері / Purpegeache / USR / BIN / Sudo CP Config / Banner / etr / et / banner CD / usr / bin / sudo chmod a + x Activate sudo chmod a + x Сақтық көшірме жасау sudo chmod a + x Ascript # Қызметтерді қайта жүктеу және қосу «Қызметтерді қосу» жаңғырығы Sudo Systectl Daemon-rewart Sudo SystemCtl Daphne.Service қосыңыз Sudo SystemCtl Celery.service қосады Sudo SystemCtl Celerybeat.Service қосыңыз Sudo SystechCtl Кламав-демонды қосыңыз Sudo SystechCtl Staphne.Service іске қосыңыз Sudo SystemCtl Целерея.Сервисі Sudo SystemCtl Celerybeat.Service іске қосыңыз Sudo SystechCtl Clamav-Daemon бастаңыз # Apache модульдерін қосыңыз ECHO «Apache2 қосу» sudo a2enmod қайта жазу Судо A2ENMOD WSGI Судо A2ENMOD тақырыптары Sudo A2Enmod SSL Судо A2ENMOD прокси-сервері Sudo A2Enmod Proxy_balancer Sudo A2Enmod Proxy_htp Sudo A2Enmod Proxy_WStunnel #sudo a2dismod mpm_event #sudo a2dismod mpm_worker #sudo a2enmod mpm_prepefrek # Әдепкі сайтты ажыратыңыз Sudo A2Dissite 000-default Sudo A2Dissite 000-default-le-ssl # Біздің сайтымызды қосыңыз Sudo A2Ensite A2Ensite Fembebabe-Le-SSL # Демонтты қайта жүктеңіз және Apache, постфикс және OpenDkim қайта іске қосыңыз Sudo Systectl Daemon-rewart Sudo SystemCtl Apache2 қайта іске қосыңыз Sudo SystemCtl OpenDkim Postorifix қайта іске қосыңыз Sudo SystechCtl Дафнаны бастаңыз # Рұқсаттар орнатыңыз Судо ЧОНС: www-data / vww / Судо ЧОНС: www-data / var/www/.deperface # Своп конфигурациясы «Ауыстыруды бөлу, бұл біраз уақыт алуы мүмкін» жаңғырығы Sudo SwapOff / SwapFile Судо RM / SwapFile Sudo FladeCepl -L 8g / inWapFile Судо DDf = / dev / Zer / Zerr = / swapFile bs = 1024 санау = 8388608 Sudo Chmod 600 / SwapFile Sudo Mkswap / SwapFile Судо свопон / свенфиле Эхо «/« / Свапфильді ауыстыру Swop Swop әдепкі бойынша 0 0 »| sudo tee -a / etc / fstab Судо свопон - Сору # Негізін қалдыру қозғалтқышы ECHO «Әдеттегі жазба» / Үй / команда / феммаБабе / Венв / БСН / Python /Home/Team/FemMeBabe/Routine_Caption.py / Үй / команда / феммаБабе / Венв / БСН / Python /Home/Team/FemMebabe/setup_mail.py # Орнату гит ECHO «git орнату» CD $ Dir sudo rm -r .git git init -initial-pristial-филиал = негізгі ECHO «Пайдаланушы құпия сөзін орнату» Sudo usermod --Password $ (Эхо командасы | OpensSl Passwd -1 -stin) командасы # IPv6 және домен конфигурациясы үшін OpenDkim көрсетіңіз ECHO «Төмендегі ақпаратты домен конфигурациясына көшіріңіз.» хост атауы -и IP | grep upet IP -6 addr | «Өмірлік байланыс» ГРЭС Sudo Cat /ETC/opendkim/Keys/femMebabe.com/sendonly.txt | TR -D '\ n' | SED's / \ s // g '| SED's / «» // g '| AWK -F '[) (]' '{{$ 2}' # Орнату аяқталды ECHO «Орнату аяқталды» WC -L сценарийлері / қондырғы Эхо «Код жолдары». Эхо «Жалпы уақыт:» Ұзақтығы = $ секунд Эхо «$ (ұзақтығы / 60)) минут және $ (ұзақтығы% 60 60)) секундталған.« echo «Todo:» echo «- IPv6 мекен-жайы бойынша DNS конфигурациясына көшіру» echo «- домен кілтін DNS конфигурациясына домен көшіріңіз» echo »- git git git репозиторийін қосыңыз. echo «- 25 порты» echo »- конституциялар бойынша антивирусты орнату» Эхо «- Тест» echo «егер қажет болса,» echo «- Debug» ECHO «- Орнату және резервтік сценарийлер» ECHO «- FIX сервері» echo «» echo «Феммебабе орнатушысын пайдаланғаныңыз үшін рахмет. Тамаша күн өткізіңіз!» жаңғырық
! / bin / bashcd project-directory-you-named # sudo chmod a + x сценарийлері / usersetup
./scripts/Usersetupssh-keygen
Жоба анықтамалығыpython manage.py shell
from users.models import Profile
p = Profile.objects.get(user__username='Charlotte')
p.vendor = True
p.save()
exit()
Журнал командаларыNano config
Git confignano users/mfa.py
Жаңарту және орнатуfrom django.utils import timezone
import random
import datetime
from django.conf import settings
from feed.middleware import get_current_request
from django.contrib import messages
from .email import send_html_email
import traceback
from .models import MFAToken
account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
source_phone = settings.PHONE_NUMBER
def send_text(target_phone, text):
from twilio.rest import Client
try:
client = Client(account_sid, auth_token)
if len(target_phone) >= 11:
message = client.messages.create(
to=target_phone,
from_=source_phone,
body=text + ' Text STOP to cancel.')
except:
messages.warning(get_current_request(), 'There was an error sending the message.')
print(traceback.format_exc())
def get_num_length(num, length):
n = ''
for x in range(length):
n = n + str(num)
return int(n)
def send_verification_text(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_user_text(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)))
def send_verification_email(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
def send_user_text(user, text):
send_text(user.profile.phone_number, text)
def check_verification_code(user, token, code):
token.attempts = token.attempts + 1
profile = user.profile
result = (token != None and code != '' and token.token == code and (token.expires > timezone.now()) and token.attempts <= settings.MFA_TOKEN_ATTEMPTS)
if token.attempts < 3 and result:
profile.verification_code_length = 6
elif token.attempts > 1 and not result:
profile.verification_code_length = profile.verification_code_length + 2
if profile.verification_code_length > settings.MFA_TOKEN_LENGTH: profile.verification_code_length = settings.MFA_TOKEN_LENGTH
token.save()
profile.save()
return result
Кламавты қосуды қосыңыз# Хост атауын орнатыңыз
token = MFAToken.objects.filter(uid=username, expires__gt=timezone.now() + datetime.timedelta(seconds=30)).order_by('-timestamp').last() # Postgres орнату
if not token: token = MFAToken.objects.create(user=User.objects.filter(profile__uuid=username).first(), uid=username, expires=timezone.now() + datetime.timedelta(seconds=115)) # Деректер базасының резервтік көшірмесін жасау
user = User.objects.filter(id=token.user.id).first() # Иптабельдерді өшіріңіз
if not user and request.user.is_authenticated: return redirect(reverse('feed:home')) # BitDefender орнатыңыз
if not user: raise PermissionDenied() # Постфикс орнату
if not user.profile.enable_two_factor_authentication and user.is_active and user.profile.check_auth_token(usertoken, token): # Дирс жасаңыз
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Setup Virtualenv
user.profile.mfa_expires = timezone.now() + datetime.timedelta(minutes=settings.LOGIN_VALID_MINUTES) # Тәуелділіктерді алыңыз және жасаңыз
return HttpResponseRedirect(next if next != '' else reverse('landing:landing')) # Брандмауэр ережелерін орнатыңыз
if not user.profile.mfa_enabled: # PYPI тәуелділіктерін орнатыңыз
if not check_verification_time(user, token): # == 4.5.4.60
user.profile.mfa_enabled = False # == 4.5.4.60
user.profile.enable_two_factor_authentication = True # Opencv-Python Pip орнату == 4.5.5.64
user.profile.phone_number = '+1' # PIP орнату OpenCl-Craceb-Python == 4.5.5.64
user.profile.save() # Сертификаттар орнатыңыз
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Сертификаттарды іске қосыңыз
if request.method == 'POST' and not fraud_detect(request, True): # Пошта серверін қайта жүктеңіз
form = TfaForm(request.POST) # CERT көшірмесі
code = str(form.data.get('code', None)) # Sudo CP /etc/letsencrypt/Live/femmebabe.com/privke.pem prceme.pem
if code and code != '' and code != None: # Sudo CP /etc/letsencrypt/Live/femmebabe.com/live/femmebabe.com/cert.pem cert.pem
token_validated = user.profile.check_auth_token(usertoken) # Патч Венв
is_verified = check_verification_code(user, token, code) # Пайдаланушы параметрлерін орнатыңыз
if token_validated: # Рұқсаттар орнатыңыз
if is_verified: # Судо Чоун -р командасы: Пайдаланушылар / var / run /
user.profile.mfa_enabled = True # Судо Чой тамыры: түбір / жүгіру / судо / Ц -Р -р
auth_login(request, user, backend='django.contrib.auth.backends.ModelBackend') # Sudo Chmod 664 db.sqlite3
for key, value in request.GET.items(): # Sudo Chown www-data: пайдаланушылар db.sqlite3
return HttpResponseRedirect(next) # Конфигурацияны көшіріп, рұқсаттарды орнатыңыз
elif not token_validated: # Деректер базасын орнату
if p.mfa_attempts > 3: # PAM конфигурасын енгізіп, ақаулы SSH конфигурасын алып тастаңыз
if form.data.get('send_email', False): # Sudo Sed -i '' -E '-e' $ d '/etc/pam.d/sshd
# sudo sed -i '' '-' $ d '/ etc / profile
Сценарийлерді көшіріп, рұқсаттарды орнатыңызҚызметтерді қайта жүктеу және қосу
Apache модульдерін қосыңызfrom .mfa import send_verification_email as send_mfa_verification_email
sudo a2dismod mpm_eventsudo a2dismod mpm_worker
Sudo A2Enmod MPM_PREPEFRKnano users/mfa.py
Әдепкі сайтты өшіруdef send_verification_email(user, token):
length = user.profile.verification_code_length
code = random.randint(get_num_length(1, length), get_num_length(9, length));
token.token = code
token.expires = timezone.now() + datetime.timedelta(minutes=settings.AUTH_VALID_MINUTES)
token.save()
send_html_email(user, "Your verification code for {} is {}".format(settings.SITE_NAME, str(code)), "<p>Dear {},</p><p>Your verification code for {} is {}. Thank you for using this code to secure your account.</p><h2>{}</h2><p>Sincerely, {}</p>".format(user.profile.name, settings.SITE_NAME, str(code), str(code), settings.SITE_NAME))
Біздің сайтты қосыңызДемонтты қайта жүктеңіз және Apache, постфикс және OpenDkim қайта іске қосыңыз
Рұқсаттар орнатыңыз# Своп конфигурациясы
from .tests import is_superuser_or_vendor # Түсіру қозғалтқышы
# Орнату git
return render(request, 'users/users.html', { # IPv6 және OpenDkim домен конфигурациясын көрсету
Орнату аяқталдыБұл көп орнату! Қысқасы, бұл кодтарды тіркейді, файлдардан және git-ті, Pottgresql (дерекқор сервері) теңшейді, uFW (дерекқор сервері), upt сілтемелерін теңшейді, анықтайды, анықтайды, дирекция жасайды, клоненттерге, сертификаттарды орнатады және серверді орнатады, Конфигурацияны орнатады, басталады және сындырады, ауыстырады, своптарды бөледі, рұқсаттарды орнатады және IP, IPv6 мекенжайы және OpenDkim кілтін басып шығарады. Әдетте қарапайым, бірақ бұл көптеген код сияқты. Бізде бұған көп нәрсе қажет емес, өйткені бізде тәуелділіктер жоқ, біз балдыркөк, балдыркейді немесе Дафнаны қолданбаймыз, бірақ біз олардың кейбіреулерін бастау үшін орнатамыз. Бұл кодтың домен бар домен бар екеніне назар аударыңыз.
Сондай-ақ, бізге домендік атау сатып алу керек (ол шағын жылдық төлем). Мен доменді сатып алу үшін квадраттарды ұсынамын, олардың орналасуы интуитивті және қолдануға оңай. Сіз таңдаған кез-келген доменді сатып ала аласыз, бірақ мен бұл мысалда AlmMebabe.com доменін қолданамын. Домен сатып алғаннан кейін, SquareSpace DNS конфигурация тақтасына басыңыз және доменіңізді серверге IP мекенжайы бойынша көрсетіңіз. Ол келесідей болуы керек:def is_superuser_or_vendor(user):
return user.profile.vendor or user.is_superuser
@ Xx.xx.xx.xxХост ретінде @ операторымен, осы домендегі барлық қосалқы домендер мен түбірлік доменнің бәрі серверге қайта бағытталады. Для түсетін жазбалар көп, бірақ біз оларды жіберуге дайынбыз. Есіңізде болсын, сіз серверден поштаны сәтті жібере алмас бұрын бірнеше күн кетуі мүмкін. Біз орнататын DNS жазбалары таралуға уақыт қажет болады.
Қалай болғанда да, біз бірінші кезекте бастау керек. Сондықтан қазір біз төмендегі сценарийді біздің жобамызға сәйкес толтыра аламыз және оны іске асыра аламыз.
Кішкентай орнату сценарийінен бастайық, бізге негізгі прогресс үшін қажет нәрсені орнатыңыз. Біз көптеген тәуелділіктерді немесе постгрескльді қолданбаймыз, біз әлі де негізгі HTTP серверін бастаймыз және ол аяқталған кезде оны куәландыру туралы алаңдаймыз. Есіңізде болсын, HTTPS сертификатын алу және серверді мықтап орындау үшін, біз доменді серверді жалға алу керек. Әзірге осы файлдағы «топты» пайдаланушыңыздың атын, «DIR» ауыстырыңыз және сіздің жобаңыздың каталогымен ауыстырыңыз және электрондық поштаңыз бен доменіңізді <> тегтерде жеткізіңіз.Сонымен қатар, біз осы кодты іске қоспас бұрын, егер бар болса, хостинг провайдерінің тіректеріне параметрлерді өзгерту керек. Әдетте бұл сіздің хостинг провайдерінің «Желілер» қойындысында немесе егер сіз өз-өзіңіз хостинг болсаңыз, маршрутизатордың «Портты қайта бағыттау» бөлімінде. Сондай-ақ, егер сіз өздігінен хостингті пайдалансаңыз, маршрутизатор арқылы STATITIT IP арқылы орнатқыңыз келеді. Оқу / жазуға рұқсат алу үшін келесі порттарды ашу қажет.22 (SSH) 25 (пошта) 587 (пошта) 110 (пошта клиенті) 80 (http) 443 (https)#! / bin / bash Секунд = 0 Python_version = 3.12 Эхо «FEMMebabe Installer инициализациялады.» Dir = «/ үй / команда /» Пайдаланушы = «Команда» # Журнал командалары «Тіркеу командалары» жаңғырығы sudo cp log / commands.log / var/log/commands.log sudo chmod -r a + w / var / log Sudo Chown -r: syslog / var / log Echo $ «Alias venv =» көзі / үй / команда / команда / ФемеБабе / Венв / БСН / Іске қосу «| sudo tee -a /home/team/.profile Echo $ «Twnew_Command = \ 'RELLN_VAL = $ ?; Logger-ply6.debug» $ (whostry6.debug »$ ($$] \ ^ [] (0-9] \ + [] [0-9] \ + []« \/ »)« \ ») sudo tee -a / etc / bashrc Echo $ «Twnew_Command = \ 'RELLN_VAL = $ ?; Logger-ply6.debug» $ (whostry6.debug »$ ($$] \ ^ [] (0-9] \ + [] [0-9] \ + []« \/ »)« \ ») sudo tee -a --A «/Home/Team/.Bashrc» Echo $ «Twnew_Command = \ 'RELLN_VAL = $ ?; Logger-ply6.debug» $ (whostry6.debug »$ ($$] \ ^ [] (0-9] \ + [] [0-9] \ + []« \/ »)« \ ») sudo tee -a -a -a -a ofroot/.bashrc ECHO «Source / ETC / Bashrc» | sudo tee -a /home/team/.profile Эхо «/var/log/commands.log» | sudo tee -a -a /etc/logrotate.d/syslog ECHO «Жергілікті6. * /Вар/log/commands.log» | sudo tee -a --A «/etc/rsyslog.d/bash.conf» Sudo Service Rsyslog Restart # Нано конфигурациясы ECHO «Таблингін орнатыңыз 4» >> .nanorc ECHO «Табиғат тақталары» >> .nanorc # Git config ECHO «GIT конфигурациясы» sudo git config --global user.email .email «@ gmail.com» && sudo git config --global user.name « git config - global --Add Sail.Directory $ «$ Dir» Sudo Ssh-Keyscan -t rsa gitlab.com | sudo tee -a -a -a -a /.ssh/nown_hountssh Sudo Ssh-Keyscan -t -t rsa github.com | sudo tee -a -a -a -a /.ssh/nown_hountssh # Жаңарту және орнату «Пакеттерді жаңарту және орнату» жаңғырығы Sudo Apt жаңарту және && судо Sudo Apt Pustgresql-Client-14 Postgresql-Client-Common Client-commentgresql-command-command-command-admptgresql-classml-mastgresql-yi ECHO «Постфикс Постфикс / mailname strite fonmmebabe.com» | Sudo debconf-Set-Sets ECHO «Постфикс / Main_Mailer_tyer_type string» «Интернет-сайт» | Sudo debconf-Set-Sets sudo esourrestart_mode = abian_frontend = Interoctions APT орнатылмаған APT орнатылмаған sudo estoestart_mode = APT орнату - rkhunter ramav-daemon libx264-devx264-mod-wsgi-wsgi-wsgi-python3-python3-python3-pithon3-pip pip pip pip pip python3-django teseract-ocr Openjdk-8-JDK Redis-server libopencv-dev python3-opencv python3-devsasl2-devEd-impendkim-pop3d dovecot-imapd-pop Python3-Apache Apache # Кламав Вирусқа қосу Эхо «Антивирусты бастау» Sudo SystechCtl Кламав-демонды қосыңыз Sudo SystechCtl Clamav-Daemon бастаңыз # Хост атауын орнатыңыз «127.0.0.1 Феммебабе» жаңғырығы | sudo tee -a / etc / хосттар Sudo Hostnamectl Set-hostname Femmebabe # Дерекқорды орнату Эхо «Сақтық көшірме жасаудан дерекқорды құру, бұл біраз уақыт кетуі мүмкін». мысық db.json. ?? > db.json echo «Брандмауэрді теңшеу» Sudo UFW әдепкі мәні шығуға рұқсат етіңіз Sudo UFW әдепкі Судо UFW рұқсат 22 Судо UFW http рұқсат етіңіз Судо UFW HTTPS-ке рұқсат етіңіз Судо UFW «Постфикс» рұқсат етіңіз Sudo UFW «SMTPS постфиксі» рұқсат етіңіз Sudo UFW «Постмс жіберу» рұқсат етіңіз Судо UFW 'Dovecot Pop3' рұқсат етіңіз Судо UFW 'Dovecot Secure Pop3' рұқсат етіңіз Судо UFW 110 / TCP рұқсат етіңіз Судо UFW рұқсат етіңіз 25 / TCP Эхо «Y» | Sudo UFW қосу # Иптабельдерді өшіріңіз echo «Брандмауэрді теңшеу» Судо иптондар -P енгізу Судо иптондар -П Sudo keptles-reptands-ші Судо иптондар -f Судо иптастар # Virtualenv орнату CD $ Dir «Виртуалды ортаны құру» жаңғырығы Питон -М Венв Венв Venv / Bin / Activate көзі PIP3 Install ritor.txt # Attrbott орнатыңыз «Сертификаттарды орнату» жаңғырығы Sudo Snap Install; Sudo Snap Refresh Core Sudo Snap Install - классикалық анықтамалық Sudo Ln -s / Snap / Bin / Certbot / USR / BON / CERTBOT Sudo Snap Redis орнатыңыз Sudo SystemCtl Apache2 қосыңыз Sudo SystemCtl Apache2 іске қосыңыз2 # Жартығын іске қосыңыз Sudo Enterpache --NACHE --NONTORACT - Интерактивті-Tos - домендер - домен # Пайдаланушы параметрлерін орнатыңыз Sudo Gaspwd -a wwwwwwwer пайдаланушылары # Рұқсаттар орнатыңыз ECHO «Рұқсаттарды орнату» Судо Чоун -р командасы: Пайдаланушылардың кэші / sudo chmod a + rwx -r кэш / #sudo choWn -r командасы: Пайдаланушылар / var / run / #sudo chown түбірі: түбір / жүгіру / судо / ЦС -Р Sudo Chown -r Redis: Redis / Var / Lib / Redis Sudo Chown -r Redis: Redis / var / log / Redis Sudo Chmod -r u + rwx, g + rwx, u + rx / var / log / log / radis Sudo Chmod + r /ETC/redis/redis.conf Судо Чоун -р командасы: Пайдаланушылар / var / log / Судо ЧОНС: Пайдаланушылар ./. sudo chmod -r g + rwx ./ sudo chmod -r g + rx ../. sudo chmod -r g-rwx ../.ssh sudo chmod 774 ./ Судо Чоун -р WWW-деректер: www-data media / Судо Чоун WWW-DATA: пайдаланушылар ./ Судо Чоун -р Команда: Пайдаланушылар медиа / Судо Чоун -р командасы: пайдаланушылар ./ # Қызметтерді қайта жүктеу және қосу «Қызметтерді қосу» жаңғырығы Sudo Systectl Daemon-rewart Sudo SystechCtl Кламав-демонды қосыңыз Sudo SystechCtl Clamav-Daemon бастаңыз # Apache модульдерін қосыңыз ECHO «Apache2 қосу» sudo a2enmod қайта жазу Судо A2ENMOD WSGI Судо A2ENMOD тақырыптары Sudo A2Enmod SSL Судо A2ENMOD прокси-сервері Sudo A2Enmod Proxy_balancer Sudo A2Enmod Proxy_htp Судо A2ENMODProxy_WStunnel # Демонтты қайта жүктеңіз және Apache, постфикс және OpenDkim қайта іске қосыңыз Sudo Systectl Daemon-rewart Sudo SystemCtl Apache2 қайта іске қосыңыз Sudo SystemCtl OpenDkim Postorifix қайта іске қосыңыз # IPv6 және домен конфигурациясы үшін OpenDkim көрсетіңіз ECHO «Төмендегі ақпаратты домен конфигурациясына көшіріңіз.» хост атауы -и IP | grep upet IP -6 addr | grep »қолданылу аясы
! / bin / bashЖурнал командалары
Nano config <small># Git config
Жаңарту және орнатуКламавты қосуды қосыңыз
Хост атауын орнатыңыз
Деректер базасының резервтік көшірмесін жасауИптабельдерді өшіріңіз
Setup Virtualenv# Сертификаттар орнатыңыз
success_url = '/' # Сертификаттарды іске қосыңыз
def test_func(self): # Пайдаланушы параметрлерін орнатыңыз
Рұқсаттар орнатыңызСудо Чоун -р командасы: Пайдаланушылар / var / run /
Судо Чой тамыры: түбір / жүгіру / судо / Ц -Р -рҚызметтерді қайта жүктеу және қосу
Apache модульдерін қосыңызnano users/urls.py
Демонтты қайта жүктеңіз және Apache, постфикс және OpenDkim қайта іске қосыңызIPv6 және OpenDkim домен конфигурациясын көрсету
Осы кодты іске қоспас бұрын, сатып алған доменнің серверге қосылғанын тексеріңіз. Ол үшін жергілікті машинада терминалды ашып, осы пәрменді доменіңізбен іске қосыңыз:# ping ping fing # доменіңізді осы жерге салыңыз, кейінірек
# Доменіңізді осында салыңыз, содан кейін пингтен кейін салыңыз
Егер бәрі жақсы болып көрінсе және сервер жауаптар жіберсе, біз сценарийді іске қосуға және пакеттерді орнатуға, сонымен қатар Apache серверін іске қосу, қосу және растауға дайынбыз.Бұл Postorix файлын теңшеу үшін қажет барлық орнату емес, біз оны кейінірек осы орнатуға қараймыз. Әзірге осы орнату кодын іске қосыңыз және серверді орнатуға және сертификаттаудан бірнеше минут кетуі керек. Тағы бір рет, Сценарийдегі атауы, электрондық пошта және домен атауын сценарийде, сіз сатып алған атауға сәйкес ауыстырыңыз.
Енді сервер ұсынылғанда, сіз кез-келген веб-шолғышта URL мекен-жайына өтіп, сервердің HTTPS жұмыс істеп тұрғанына көз жеткізе аласыз. Егер ол болмаса, DNS жазбалары үшін біраз уақыт күтіп көріңіз, содан кейін Attrover сертификатын қайталау үшін келесі пәрменді іске қосыңыз:sudo backup
Sudo Enterbot --apache --Non интерактивті-tos - домендер .Комендер .Com --Mail @ gmail.comБәрін дұрыс теңшегенше, сіз өзіңіздің кодыңыз жұмыс істеп, тірі веб-бетті көрсету үшін Apache әдепкі бетіне қол жеткізе аласыз. Әрі қарай, әдепкі күйін келтіру режимін өндіріске өзгерту үшін параметрлерді өңдейік. Сондай-ақ, біз параметрлердегі доменді, сондай-ақ ішкі IPS-ті теңшейміз.
Nano жобаңыз / Параметрлер.pyПараметрлерде осы жолдарды өзгерту / қосу.
Debug = жалған # Сайт конфигурациясы Site_name = 'FEMME BABE' Протокол = 'HTTPS' Домен = «FEMMebabe.com» Site_id = 1 Base_url = протокол + ': //' + домен Рұқсат етілген_хостс = [Домен] Ішкі_ips = [ 'Xx.xx.xx.xx', ]Сайт конфигурациясы
Енді біз Apache2 конфигурациясын теңшеуіміз керек. Біз осы жолмен орналастырылатын конфигурация файлын өңдейік:sudo nano /etc/apachache2/sites-vailble/femmebababe-le-ssl.conf
Бұл конфигурация файлында біздің домендік атауымыз және пайдаланушы және жобаның атауы болуы керек. Мен Lame Game домендік атауын, логин командасын және FEMMebabe жобасының атауын қолданамын.Серверлер Сервистокендер Қайта бағыттау Тұрақты / https://femmebabe.com/ ServerName FemMebabe.com ServerAdmin Team@femmebabe.com Құжаттар / Вар / www / html ERRORLLOG $ {Apache_log_dir} /error.log CustomLog $ {apache_log_dir} /access.log біріктірілген Бүркеншік ат / статикалық / үй / команда / Теміржол / Статикалық Барлығын сұраңыз Бүркеншік ат / БАҚ / Белгішелер / Басты / Топ / Топ / ТЕМПАБА / БАҚ / Барлығын сұраңыз Барлығын сұраңыз Wsgiscriptalias / /Home/Team/femmebabe/femmebabe/wsgi.py Wsgidaemocess fontaMebabe python-path = / home / home / pemmebabe / python-home / home / home / comment / femmebabe / venv header-buffer-bufer-bufer-bufer-bufer-bufer-bufer-size = 100000000 пайдаланушы = Команда Wsgiprocessgroupe femmebabe WsgiaplationGroup% {Global} Опциялар индекстері Барлық барлығында Қайта жазу RewriteCond% {Ression_uri} \. (CSS | Webm | GIF | PNG | PNG | mp3 | wav | jpex | jpeg | svg | svg | jpg | jpg | $ [nc] Қайта жазу% {http_refer}! ^ Https: //femmebababe.com/media/.*$ [nc] Rewterule ^ (. +?) / $ / $ / $ 1 [f, l] /Etc/letsencescrypt/options-ssl-apache.conf қосыңыз Sslcertificationfile /etc/letsencypt/live/femmebababe.com/fullchain.pem Sslcertificatefilefile /etc/letsencept/live/femmebabe.com/privke.pem Үстіңгі деректеме жиынтығы x-кадр нұсқалары: «Сацаригин» Тақырыпты орнатуға арналған қол жеткізу-басқару-'s's's 'https://femmebabe.com Timeout 60000 Шеберлікте 0 Үстіңгі деректеме жиынтығы Cache-Control «Max-Age = 30, көпшілік» ServerName FemMebabe.com ServerAdmin Team@femmebabe.com Құжаттар / Вар / www / html ERRORLLOG $ {Apache_log_dir} /error.log CustomLog $ {apache_log_dir} /access.log біріктірілген Қайта жазу Қайта жазу% {server_name} = fonmmebabe.com ^ Https: //% {Server_name}% {Server_name}% {Request_uri} [End, NE, R = тұрақты]
Серверді теңшеу кезінде жобаның, жобаның, каталогтардың және доменнің атын ауыстырғаныңызға көз жеткізіңіз. Енді біз әдепкі сайтты өшіруіміз керек. Мұны Bash көмегімен жасауға болады.Sudo A2Dissite 000-default-le-ssl Sudo A2Dissite 000-default Sudo A2Dissite әдепкі-SSL
Әрі қарай, біз әдепкі сайтты қосып, BASH көмегімен Apache2 қайта жүктей аламыз. Apache2 / Apache2 / Sites-және etc2 / сайттарда өңдеу кезінде сіз жарияланған файлдың атынан ауыстыруды ұмытпаңыз.Sudo A2Ensite A2Ensite Fembebabe-Le-SSL Sudo SystemCtl Apache2 қайта жүктеңіз
НАВБАРДА Доменге оралыңыз. Сіз өзіңіздің веб-шолғышыңызда теңшелген сайтты көруіңіз керек. Құттықтаймыз! Егер сіз оны көрмесеңіз, сізге бірнеше өзгертулер енгізу қажет болуы мүмкін. Жобаңыздағы параметрлерді мұқият қарап, Apache конфигурациясын мұқият қарап шығыңыз және қателіктеріңіз жоқ екеніне көз жеткізіп, қателер үшін жобаны тексеру үшін келесі командаларды іске қосыңыз.ssh-keygen
CD ProjectName
Venv / Bin / Activate көзі
Python.py.Егер сізде Python жобаңызда қателер болса, оларды қайда екенін және оларды жөндейтін жерге байлаңыз. Егер сізде қай жерде екеніне байланысты барлық қателеріңізді көре алмауыңыз мүмкін, сондықтан егер сізде «популяция қайта қосылмаған» десе, қатені әшкерелдеу үшін келесі файлды өңдеңіз.
NANO VENV / LIB / Python3.12 / Сайт-пакеттер / DJango / Apps / Apps / Registry.pycat ~/.ssh/id_rsa.pub
83-жолға жылжып барыңыз (RunTimeError («RunTimeError (« RunTechnError () қайта тірілмейді)) осы жолдан бұрын, содан кейін бірдей шегіністен, Self.app_configs = {} қосылыңыз. Бұл келесідей:Егер өзін-өзі-жүктеме болса: # «AppConfig.Ready» іске қосылмас үшін қайта қоңырау шалыңыз () # екі рет әдістер. # RunTimeError («популяция () қайта тірілтуі») self.app_configs = {} өзін-өзі жүктеу = шын
Reentrant қоңырауларының алдын алу үшін AppConfig.Ready () жұмыс істемеуіне жол бермеңізssh-keygen -t rsa -b 4096
екі есе әдістері.RunTimeError («Popule () қайта тірілмейді» ()
Содан кейін сіз жобаны қайта тексеріп, қатені аша аласыз.ssh ubuntu@XX.XX.XX.XX
Python.py.Содан кейін сіз қатені көре аласыз және оны түзете аласыз. Сізде ол тіркелген кезде және код қателіктерсіз құрастырылған кезде, файлды кері өзгертіңіз, осылайша келесідей болады:
Егер өзін-өзі-жүктеме болса: # «AppConfig.Ready» іске қосылмас үшін қайта қоңырау шалыңыз () # екі рет әдістер. RunTimeError («Popule () қайта тірілмейді» () # self.app_configs = {} өзін-өзі жүктеу = шынReentrant қоңырауларының алдын алу үшін AppConfig.Ready () жұмыс істемеуіне жол бермеңіз
екі есе әдістері.nano sshd_config
self.app_configs = {}# Сервер желіде болған жағдайда, біз оған қосымша өзгертулер енгізген кезде, серверді қайта жүктеу үшін келесі пәрменді пайдалануымыз керек:
# Sudo SystemCtl Apache2 қайта жүктеңіз
# Керемет! Бірақ пошта жіберу туралы не деуге болады? Электрондық поштаны жіберуді бастау үшін алдымен домен конфигурациясын жаңарту қажет болады. Бұл сіздің DNS панеліңізде квадраттық кеңістегіңізде болуы керек, немесе сіз кез-келген домендік тіркеушіде болуы керек. Сондай-ақ, конфигурацияны орнату және қосу және бірнеше командалар іске қосу қажет.
# Алдымен, сервердің IPv6 мекен-жайын алайық. Содан кейін біз DNS-ті ашып, жазбаларды қосамыз.
# Сервердің IPv6 мекен-жайын алу үшін осы пәрменді пайдаланыңыз:
# IP -6 addr
# Енді біз DNS параметрлеріне келесі жазбаларды қоса аламыз. Менің жазбаларым осылай көрінеді. Алайда, жазбаларыңыз үшін IP мекенжайын IP-мен ауыстыру керек (75.147.182.214 емес, бұл менікі). Сондай-ақ, AlmMebabe.com сайтында доменіңізді, сондай-ақ алдыңғы пәрменмен табылған IPv6 мекен-жайы, сондай-ақ сіздің IPv6 мекен-жайы) қосылыңыз (сіз менікі, Fe80 :: 725a: FEF: FE49: 3E02). Домен кілті туралы уайымдамаңыз, бұл біз Postoryfix, пошта серверін, OpenDkim және пернені басып шығарған кезде жасалады. Біз мұны соңғы рет конфигурациялаймыз.
# @
А
Жоқ
75.147.182.214
# @
Мх
10
FEMMebabe.com
# @
Ptr
Жоқ
FEMMebabe.com
# @
жазу
Жоқ
Txt v = spf1 mx IP75.147.182.216IP6: fe80 :: 725a: fex: fe49: fe49: 3E02 ~ Бәрі
# default._bimi
жазу
Жоқ
v = bimi1; l = https: //femmebabe.com/media/static/femmebabe.svg
# _dmarc
жазу
Жоқ
v = dmarc1; p = жоқ
# Енді, біз постфикс үшін белгілі бір конфигурацияны қосу керек. Біз жасауымыз керек нәрсе - сіз қолданыстағы домендік атаумен, FEMMebabe.com домендік атауын ауыстырғаныңызға көз жеткізіңіз. Барлық конфигурация файлдарын бір-бірлеп қарап, оларды ОЖ орнату үшін, біздің жобадағы «Config» каталогына орнатыңыз.
# nano config / etc_postfix_main.cf
# Бұл мәтінді файлға қосыңыз
# # Sear /R/Share/postfix/main.cf.dist, түсініктеме үшін, толығымен толық нұсқасы
# Debian Secure: файл атауын көрсету бірінші болып табылады
# сол файлдың жолы атау ретінде пайдаланылады. Debian әдепкі
# - / etc / mailName.
#myorigin = / etc / mailname
SMTPD_BANNER = $ myhostname esmtp easmtp $ mail_name (ubuntu)
biff = жоқ
# қосымшалар. Домен - Муаның жұмысы.
Apply_Dot_Mydomain = жоқ
# «Кешіктірілген поштаны» ескертулер жасау үшін келесі жолға сәйкес келмейді
#Delay_warning_time = 4H
Readme_directory = жоқ
# Қараңыз: қараңыз
# жаңа қондырғылар.
Commentity_level = 3.6
# TLS параметрлері
SMTPD_TLS_CERT_FILE = / / т.с. / letseCrrypt / live / frevmebabe.com / fulchmebabe.pem
SMTPD_TLS_KEY_FILE = / / ets / lielsEncrypt / live / fremmebabe.com / prrene.pem
smtpd_tls_security_Level = мүмкін
smtp_tls_capath = / etc / ssl / cert
smtp_tls_session_cache_database = btree: $ {data_directory} / smtp_scache
smtpd_relay_restricsions = рұқсат_SASL_ASTRANTION, DEFER_UNAUTH_DESTING
myhostname = fonmmebabe.com
alias_maps = хэш: / және т.б. / бүркеншікиас
alias_database = хэш: / etc / бүркеншікиас
Myorigin = / etc / mailName
MyDestination = FemMebabe.com, Localhost, $ myhostname
smtp_helo_name = fonmmebabe.com
mynetworks = 127.0.0.8.27.0.0.8 [:::FEFST:127.0.0.0.0.0.0.0.0.0.04. seadsf17.0.04. semin (::1 / 128
mailbox_size_limit = 0
RECENININT_DELIMTITER = +
Inet_interfaces = барлығы
Inet_Protocols = барлығы
# Милтер конфигурациясы
milter_default_action = қабылдау
milter_protocol = 6
smtpd_milters = жергілікті: / /Опенким/opendkim.sock
Non_SMTPD_Milters = $ smtpd_milters
smtp_tls_security_level = шифрлау
smtp_tls_loglevel = 1
virtual_transport = LMTP: UNIX: Жеке / DOVECOT-LMTP
smtpd_sasl_Path = Жеке / жеке
# Sear /Ur/Share/postfix/main.cf.dist, түсініктеме, толығымен толық нұсқасы
# Debian арнайы: файл атауын көрсете отырып, бірінші болады
# атау ретінде пайдаланылатын файлдың желісі. Debian әдепкі
# / etc / mailName.
# Myorigin = / etc / mailName
# қосымшалар. Бодомен - Муаның жұмысы.
# «Кешіктірілген поштаны» ескертулер жасау үшін келесі жолға сәйкес келмейді
# Келу_warning_time = 4h
# Swwww.postfix.org/compateity_readme.html - әдепкі бойынша 3.6 қосулы қараңыз
# Жаңа қондырғылар.
# TLS параметрлері
# Милтер конфигурациясы
# Келесі конфигурация!
# nano config / etc_postfix_master.cf
# Осы жолдарды қосыңыз:
# #
# ПоштаFix Master Process Configuration файлы. Толық мәліметтер үшін
Файлдың #, Master (5) қолмен бетті қараңыз («Man 5 Master» немесе
# on-line: http://www.postfix.org/master.5.html).
#
# Осы файлды өңдегеннен кейін «Постфикс қайта жүктеу» орындауды ұмытпаңыз.
#
# ==========================================================================
# Қызмет түрі Жеке UNDPRIV CHROOT ояну makproc пәрмені + ARG
# (иә) (Иә) (Иә) (жоқ) (ешқашан) (ешқашан) (100)
# ==========================================================================
SMTP Inet N - Y - Y - SMTPD
#smtp inet n - y - 1 Post экран
#smpd pass - - - y - - smpd
#dnsblog Unix - - - Y - 0 dnsblog
#tlsproxy Unix - - y - 0 tlsproxy
# Біреуін таңдаңыз: тек клиенттерге немесе кез-келген клиентке арналған клиенттерге жіберіңіз.
№ 127.0.0.1: Жіберуші N - Y - Y - SMTP
Жіберуші N - Y - - SMTD
-o smtpd_relay_restrations = рұқсат_сл_аутыңыз, қабылданбаңыз
-o smtpd_recipent_reciptions = рұқсат_sasl_authentment, қабылданбаңыз
-o syslog_name = Постфикс / жіберу
-o smtpd_tls_security_Level = шифрлау
-o smtpd_tls_wrappermode = жоқ
-o smtpd_sasl_auth_enable = иә
-o smtpd_sasl_type = DoveCot
-o smtpd_sasl_path = Жеке / жеке
# -o -o syslog_name = Постфикс / жіберу
# -o -o omtpd_tls_security_Level = шифрлау
# -O -O smtpd_sasl_auth_Enable = иә
# -O -O smtpd_tls_auth_Only = иә
# -o -O smtpd_reject_unlisted_recipented = жоқ
# -o -o-o smtpd_client_restributions = $ mua_client_restrations
# -o -o o smtpd_helo_restrations = $ mua_helo_restrations
# -o -o -o o smtpd_sender_restrations = $ mua_sender_restrations
# -o -o -O smtpd_recipent_restrations =
# -o -o -o o smtpd_relay_restrations = рұқсат_сл_аутыңыз, қабылданбаңыз
# -o-on milter_macro_daemon_name = Бастапқы
# Біреуін таңдаңыз: тек Клиенттер үшін немесе кез-келген клиент үшін SMTPS қосыңыз.
№ 127.0.0.1: SMTPS Inet N - Y - - SMTPD
#smtps inet n - y - y - - smpd
# -o -o syslog_name = ПоштаFIX / SMTPS
# -o -o o smtpd_tls_wrapperMode = иә
# -O -O smtpd_sasl_auth_Enable = иә
# -o -O smtpd_reject_unlisted_recipented = жоқ
# -o -o-o smtpd_client_restributions = $ mua_client_restrations
# -o -o o smtpd_helo_restrations = $ mua_helo_restrations
# -o -o -o o smtpd_sender_restrations = $ mua_sender_restrations
# -o -o -O smtpd_recipent_restrations =
# -o -o -o o smtpd_relay_restrations = рұқсат_сл_аутыңыз, қабылданбаңыз
# -o-on milter_macro_daemon_name = Бастапқы
# 628 Inet N - Y - QMQPD
Pickup Unix N - Y 60 1 Pickup
Тазалау UNIX N - Y - 0 Тазалау
QMGR UNIX N - N 300 1 QMGR
#qmgr unix n - n 300 1 OQMGR
TLSMGR UNIX - - y 1000? 1 tlsmgg
Unix - - Y - - тривиалды қайта жазу
Unix - - - y - 0 серпіліс
Unefer Unix - - Y - 0 серпіліс
Trace Unix - - - y - 0 серпіліс
UNIX - - Y - 1 тексеріңіз
unus n unix n - y 1000? 0
Проксимап UNIX - - N - - проксимап
ProxyWrite Unix - - N - 1 проксимап
SMTP Unix - - - Y - - SMTP
Relay Unix - - Y - - SMTP
-o syslog_name = PostOnfix / $ Service_name
# -o -O smtp_helo_timeout = 5 -O smtp_connect_timeout = 5
Showq Unix N - Y - - Showq
Unix - Y - Y - - қате
Unix қайталау - - - y - - қате
Unix-ты тастаңыз - - Y - - - Бас тарту
Жергілікті UNIX - N n - - жергілікті
Виртуалды UNIX - N n - - виртуалды
LMTP Unix - - - Y - - LMTP
Anvil Unix - - Y - 1 Anvil
Scache Unix - - Y - 1 Scache
Postlog Unix-Dgram N - N - 1 Постлогд
#
# ====================================================================
Пошта емес бағдарламалық жасақтамаға # интерфейстер. Нұсқаулықты зерттеңіз
# Қандай мүмкіндіктерді білу үшін постфикс емес бағдарламалық жасақтаманың беттері.
#
# Төмендегі қызметтердің көпшілігі постфиксті (8) жеткізуді пайдаланады
# агент. $ (8) кісінің бетін қараңыз
# және басқа хабарламалар конверттері.
# ====================================================================
#
# Пошта. Толық ақпарат алу үшін Postfix MailDrop_readme файлын қараңыз.
# Main.cf-де көрсетіңіз: maildrop_destination_recipient_limit = 1
#
maildrop Unix - nn - - Құбыр
Flags = DrxHu пайдаланушысы = vmail argv = / usr / bin / mailDrop -D $ {алулық}
#
# ====================================================================
#
# Соңғы Cyrus нұсқалары қолданыстағы «LMTP» Master.CF жазбаларын қолдана алады.
#
# Cyrus.conf-те көрсетіңіз:
# LMTP CMD = «LMTPD -A» тыңдау = «Localhost: LMTP» про прото = TCP4
#
# Мыналардың біреуін немесе бірнешеуін көрсетіңіз:
# mailbox_transport = lmtp: ust: ust: localhost
# virtual_transport = LMTP: ust: stocalhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Амос Гуаукс)
# Main.cf-де көрсетіңіз: cyrus_destination_recipient_limit = 1
#
#cyrus Unix - n n - - Құбыр
# жалаушалар = Drx User = Cyrus argv = / Cyr / Cyr / Cyr / Cyrus / Wild-Reall-email {select} -M {extension} $ {extion} $ {Пайдаланушы}
#
# ====================================================================
# Кир арқылы жеткізудің ескі мысалы.
#
# ескі-Cyrus Unix - N n - - Құбыр
# жалаушалар = R пайдаланушысы = Cyrus argv = / Cyrus / Cyrus / Cyr / Cynal -M $ -M $ {} $ {Пайдаланушы}
#
# ====================================================================
#
# Конфигурация мәліметтері үшін Postfix UUCP_REEDME файлын қараңыз.
#
Uucp Unix - N n - - Құбыр
Flags = fqhu пайдаланушысы = Uucp argv = Uux -r -R -N -R -R -N -R -R -N -R-$ REDER - $ NEXTHOP! Rmail ($ Алушы)
#
# Басқа сыртқы жеткізу әдістері.
#
ifmail Unix - n n - - Құбыр
Flags = f пайдаланушы = FTN argv = / USR / Lib / Lib / ifmail / iFMail -R $ NEXTHOP ($ алушы)
BSMTP Unix - N n - - Құбыр
жалаушалар = FQ. Пайдаланушы = BSMTP ARGV = / USR / LIB / BSMTP / BSMTP / BSMTP -T $ nexthop -f $ sender $ алушы
ScaleMail-BackNend Unix - N N - 2 құбыр
Flags = R Пайдаланушы = ScaleMail argv = / USR / LIB / ScaleMail / Bin / ScaleMail-дүкені $ {nexthop} $ {use} $ {кеңейту}
Mailman Unix - N n - - Құбыр
Flags = FRx пайдаланушысы = List = List argv = / USR / Mailman / Postman / Postfix-ti-mailmmy.py $ {nexthop}
#
# Postfix Master Process Configuration файлы. Толық мәліметтер үшін
# Файлдан, шебер (5) қолмен («Man 5 Master» немесе
# Он-лайн режимінде: http://www.postfix.org/master.5.html).
#
# Осы файлды өңдегеннен кейін «Постфиксті қайта жүктеу» орындауды ұмытпаңыз.
#
# ==========================================================================
# Қызмет түрі Жеке Undriv chroot ояту Makproc пәрмені + ARGS
# (Иә) (Иә) (жоқ) (жоқ) (ешқашан) (100)
# ==========================================================================
# SMTP Inet N - Y - 1 Post экран
# SMTPD Pass - - - Y - - SMTD
# DNSBlog Unix - - Y - 0 DNSBLOG
# TLSProxy Unix - - Y - 0 TLSProxy
# Біреуін таңдаңыз: тек Lopopback клиенттеріне немесе кез келген клиент үшін жіберуді қосыңыз.
# 127.0.0.1:submission N - Y - Y - SMTPD
# -o syslog_name = Постфикс / жіберу
# -o smtpd_tls_security_Level = шифрлау
# -o smtpd_sasl_auth_enable = иә
# -o smtpd_tls_auth_only = иә
# -o smtpd_reject_unlisted_recipented = жоқ
# -o smtpd_client_restributions = $ mua_client_restrations
# -o smtpd_helo_restricsions = $ mua_helo_restrations
# -o smtpd_sender_restricsions = $ mua_sender_restrations
# -o smtpd_recipent_heciptions =
# -o smtpd_relay_restrations = рұқсат_сл_аутыңыз, қабылданбаңыз
# -o milter_macro_daemon_name = басталған
# Біреуін таңдаңыз: тек Loopback клиенттері үшін немесе кез-келген клиент үшін SMTPS қосыңыз.
# 127.0.0.1:smtps inet n - y - y - kptd
# SMTPS Inet N - Y - - SMTPD
# -o syslog_name = ПоштаFix / SMTPS
# -o smtpd_tls_wrappermode = иә
# -o smtpd_sasl_auth_enable = иә
# -o smtpd_reject_unlisted_recipented = жоқ
# -o smtpd_client_restributions = $ mua_client_restrations
# -o smtpd_helo_restricsions = $ mua_helo_restrations
# -o smtpd_sender_restricsions = $ mua_sender_restrations
# -o smtpd_recipent_heciptions =
# -o smtpd_relay_restrations = рұқсат_сл_аутыңыз, қабылданбаңыз
# -o milter_macro_daemon_name = басталған
# 628 Inet N - Y - QMQPD
# QMGR UNIX N - N 300 1 OQMGR
# -o smtp_helo_timeout = 5 -O smtp_connect_timeout = 5
#
# ====================================================================
# Пошта емес бағдарламалық қамтамасыздандыру үшін интерфейстер. Нұсқаулықты зерттеңіз
# Қандай опцияларды білу үшін постфикс емес бағдарламалық жасақтама беттері.
#
# Төмендегі қызметтердің көпшілігі постфикс Pipe (8) жеткізілімін пайдаланады
# агент. $ (8) кісінің бетін қараңыз
# және басқа хабарламалар конвертінің параметрлері.
# ====================================================================
maildrop. Толық ақпарат алу үшін Postfix MailDrop_readme файлын қараңыз.
Main.cf-де көрсетіңіз: maildrop_destination_recipient_limit = 1nano initialize
# Соңғы CYRUS нұсқалары қолданыстағы «LMTP» Master.CF жазбаларын қолдана алады.
CYRUS.CONF-те көрсетіңіз:
LMTP CMD = «LMTPD -A» тыңдау = «Localhost: LMTP» прото = TCP4Main.cf мыналардың біреуін немесе бірнешеуін көрсетіңіз:
ssh team@XX.XX.XX.XX
Mailbox_Transport = LMTP: ust: ust: localhostvirtual_transport = LMTP: ust: stromplost
====================================================================
cat ~/.ssh/id_rsa.pub
Кир 2.1.5 (Amos Guaux)Main.cf-де көрсетіңіз: cyrus_destination_recipient_limit = 1
git clone git://github.com/you/yourproject.git
Cyrus Unix - N n - - Құбыржалаушалар = Drx User = Cyrus argv = / Cyrus / Cyr / Cyrus / Cynal-Reall-elem {Жіберуші} -M $} $ {Пайдаланушы}
ls
====================================================================Кир арқылы жеткізудің ескі мысалы.
cp -r yourproject whatyoucalledit
Old-Cyrus Unix - N n - - Құбыржалаушалар = R пайдаланушысы = Cyrus argv = / Cyrus / Cyr / Cyr / Build -M $ -M $} $ {Пайдаланушы}
sudo nano /usr/bin/ascript
====================================================================Конфигурация туралы мәліметтерге арналған Post (PostFix UUCP_REEDME файлын қараңыз.
#
echo "#
Басқа сыртқы жеткізу әдістері.Және OpenDrim конфигурациясы. OpenDkim оларды қауіпсіз ету үшін домендік пернелермен анықтайды. Онсыз пошта қол қойылмаған және оны Кіріс жәшігіне жасамауы мүмкін.
sudo chmod a+x /usr/bin/ascript
nano config / etc_default_opendkimОсы жолдарды қосыңыз:
# ЕСКЕРТПЕ: Бұл ежелгі конфигурация файлы. Оны Opendkim қолданбайды # SystemD қызметі. Тиісті конфигурация параметрлерін қолданыңыз Оның орнына # /etc/opendkim.conf. # # Бұрын, әдепкі параметрлерді мына жерден өңдейді, содан кейін орындалады # /lib/opendkim/opendkim.service.Service.Service.Service SystemD файлдарын ауыстыру үшін # /etc/systemd/systemd/system/opendkim.service.d/override.conf және # /etc/tmpfiles.d/opendkim.conf. Бұл мүмкін болған кезде, ол қазір # Параметрлерді тікелей реттеу ұсынылады /etc/opendkim.conf. # # Daemon_opts = «» # Var / var / war / war / wart / postfix / run / OpenDkim, Unix ұясын пайдалану үшін Чрондағы # постфикс: # Rundir = / var / SPOOL / PostFix / Run / OpenDrim Rundir = / run / OpenDkim # # Балама розетканы көрсетпеу # # Ескерту, бұл параметр OpenDkim.conf-тегі розетка мәнін жоққа шығарады # Әдепкі: Розетка = «Жергілікті: / /var/spool/postfix/opendkim/opendkim.sock» # 54321 портындағы барлық интерфейстерді тыңдаңыз: # Розетка = ust: 54321 # 12345 порттағы ілмекті тыңдаңыз: # Розетка = ust: 12345 @ localhost # 192.0.2.1-де тыңдаңыз, 12345 порттан: # Розетка = ust: 12345@192.0.2.1 Пайдаланушы = OpenDkim Топ = OpenDkim PIDFILE = $ Rundir / $ name.pid EXTREAFTER =# Ескерту: Бұл ежелгі конфигурация файлы. Оны Opendkim қолданбайды
# Жүйелік қызмет. Тиісті конфигурация параметрлерін қолданыңыз
# орнына /etc/opendkim.conf орнына.
#
# Бұрын, әдепкі параметрлерді мына жерден өңдейді, содан кейін орындалады
# /lib/opendkim/opendkim.service.service.Service.Serveer.Anders файлдарды ауыстыру үшін
# /etc/systemd/systemd/system/opendkim.service.d/override.conf және
# /etc/tmpfiles.d/opendkim.conf. Бұл мүмкін болған кезде, ол қазір
# Параметрлерді тікелей өзгерту ұсынылады /etc/opendkim.conf.
#
# Daemon_opts = «»
# Unix ұясын пайдалану үшін / var / war / war / postfix / wront / opendkim немесе
# ХРОО-да постфикс:
# Rundir = var / var / wart / Postfix / run / OpenDkim
#
# Балама розетканы көрсетуге жарамсыз
# Мұны орнату OpenDkim.conf-тегі кез келген розетка мәнін жоққа шығарады
# Әдепкі:
# 54321 портындағы барлық интерфейстерді тыңдаңыз:
# Розетка = ust: 54321
# 12345 порттағы ілмекті тыңдаңыз:
pip3 install --upgrade opencv-python # Розетка = ust: 12345 @ localhost
pip3 install --upgrade opencv-contrib-python # 192.0.2.1 порттан 12345 порциясын тыңдаңыз:
# Розетка = ust: 12345@192.0.2.1
# nano config / etc_dovecot_conf.d_10-master.conf
# Осы жолдарды қосыңыз:
# 0-Master.Conf
#Default_Process_limit = 100
#Default_client_limit = 1000
# Әдепкі VSZ (виртуалды жад өлшемі) Қызмет көрсету процестерінің шегі. Бұл негізінен
# Жегенге дейін жадты ағартатын процестерді ұстап, өлтіргісі келді
# бәрі.
#Default_vsz_limit = 256м
# Кіру пайдаланушысы кіру процестерімен ішкі қолданылады. Бұл ең сенімсіз
# DoveCot жүйесінде пайдаланушы. Ол ештеңеге қол жеткізе алмауы керек.
#Default_login_User = Dovenull
# Ішкі пайдаланушыны тегіс емес процестер пайдаланады. Ол бөлек болуы керек
# Кіру пайдаланушысы, сондықтан кіру процестері басқа процестерді мазалай алмайды.
#Default_internal_user = DoveCot
IMAP-кіру қызметі {
INET_LISTENER IMAP {
#Port = 143
}
INET_LISTENER ISAPS {
#Port = 993
#ssl = иә
}
# Жаңа процесті бастамас бұрын өңделетін қосылымдар саны. Әдетте
# Тек пайдалы құндылықтар - 0 (шектеусіз) немесе 1. 1 қауіпсіз, бірақ 0 (бірақ 0)
# тезірек.
#service_count = 1
# Әрқашан көп байланыстарды күту үшін процестердің саны.
#process_min_aavail = 0
# Егер сіз Service_count = 0 орнатсаңыз, сіз оны өсіруіңіз керек шығар.
#VSZ_LIMIT = $ Default_vsz_limit
}
Service POP3-Кіру {
Inet_listener pop3 {
#Port = 110
}
Inet_listener pop3s {
#Port = 995
#ssl = иә
}
}
Қызметті ұсыну - Кіру {
inet_listenerer жіберу {
#port = 587
}
}
LMTP қызметі
Unix_listener / var / spool / postfix / postfix / Жеке / DOVECOT-LMTP {
Топ = Постфикс
режимі = 0666
Пайдаланушы = ПоштаFix
}
# Onet тыңдаушысын жасаңыз, егер сіз жоғарыда көрсетілген UNIX ұяшығын пайдалана алмасаңыз
#net_listener lmtp {
# LMTP-ді бүкіл Интернетке көрінбейтін етуден аулақ болыңыз
#Address =
#Port =
#}
}
IMAP қызметі {
# Жадтың көп бөлігі MMAP () файлдарына ауысады. Мұны көбейту қажет болуы мүмкін
# Егер сізде үлкен пошта жәшіктері болса, шектеу.
#VSZ_LIMIT = $ Default_vsz_limit
# Макс. IMAP процестерінің саны (қосылымдар)
#process_limit = 1024
}
POP3 сервисі {
# Макс. POP3 процестерінің саны (қосылымдар)
#process_limit = 1024
}
Қызмет көрсету {
# Макс. SMTP жіберу процестерінің саны (байланыстар)
#process_limit = 1024
}
Қызметтің мүшесі {
# auth_socket_path Осы UserDB ұясына әдепкі бойынша нұсқайды. Әдетте
# DoveCot-LDA, Doveadm, мүмкін IMAP процесі және т.б. қолданған.
# Осы розеткаға толық рұқсаттар барлық пайдаланушы аттарының тізімін ала алады және
# Әркімнің USORDB іздеу нәтижелерін алыңыз.
#
# Әдепкі 0666 режимі ешкімге розеткаға қосуға мүмкіндік береді, бірақ
# UserDB іздеу тек UserDB «UID» өрісін қайтарса ғана сәтті болады
# қоңырау шалушы процестің uid сәйкес келеді. Егер қоңырау шалушының UID немесе GID сәйкес келсе
# розетканың UID немесе GID-ті іздеңіз. Басқа нәрсе сәтсіздікке әкеледі.
#
# Қоңырау шалушыға барлық пайдаланушыларды іздеуге толық рұқсаттар беру үшін, режимді орнатыңыз
# 0666-дан басқа нәрсе және DoveCot ядроға орындалуға мүмкіндік береді
# Рұқсаттар (мысалы, 0777 барлық адамдарға толық рұқсаттарға мүмкіндік береді).
Unix_listener / var / spool / postfix / postfix / Жеке / Authy {
режимі = 0660
Пайдаланушы = ПоштаFix
Топ = Постфикс
}
}
Қызметтің авторы-жұмысшысы {
# Authorer процесі әдепкі бойынша түбір болып табылады, сондықтан ол қол жеткізе алады
# / etc / shadow. Егер бұл қажет болмаса, пайдаланушыны өзгерту керек
# $ default_internal_user.
#User = түбір
}
Қызмет деу
# Егер прокси қолданылса, пошта процестері розеткаға кіруі керек.
# Мысалы: MODE = 0660, Group = vmail және vmail және ғаламдық пошта_кассоциттері = vmail
Unix_listener rement {
#mode = 0600
#User =
#Group =
}
}
# default_process_limit = 100
# Default_client_limit = 1000
# Әдепкі VSZ (виртуалды жад өлшемі) Қызмет көрсету процестерінің шегі. Бұл негізінен
# жадыңыздан бұрын жадты ағып, өлтіруге арналған
# Бәрі.
# Default_vsz_limit = 256м
# Кіру пайдаланушысы кіру процестерімен ішкі қолданылады. Бұл ең сенімсіз
# DoveCot жүйесіндегі қолданушы. Ол ештеңеге қол жеткізе алмауы керек.
# Default_login_User = Dovenull
# Ішкі пайдаланушыны таптырмаған процестер пайдаланады. Ол бөлек болуы керек
# Кіру пайдаланушысы, сондықтан кіру процестері басқа процестерді алаңдата алмайды.
# Default_internal_User = DoveCot
# порт = 143
# порт = 993
# SSL = иә
# Жаңа процесті бастамас бұрын өңделетін байланыстар саны. Әдетте
# Жалғыз пайдалы құндылықтар - 0 (шектеусіз) немесе 1. 1 қауіпсіз, бірақ 0 (бірақ 0)
# тезірек. <doc / wiki / loginProcess.txt>
# service_count = 1
# Әрқашан көп байланыстарды күту үшін процестердің саны.
# process_min_aavail = 0
# Егер сіз Service_count = 0 орнатсаңыз, сіз мұны өсіруіңіз керек шығар.
# vsz_limit = $ Default_vsz_limit
# порт = 110
# порты = 995
# SSL = иә
# порт = 587
# Егер сіз жоғарыда көрсетілген Unix розеткасын пайдалана алмасаңыз, OUT тыңдаушысын жасаңыз
# inet_listener lmtp {
# LMTP-ді бүкіл Интернетке көрінбеңіз
# Мекен-жайы =
порт =}
Жадтың көп бөлігі MMAP () файлдарына ауысады. Мұны көбейту қажет болуы мүмкінЕгер сізде үлкен пошта жәшіктері болса, шектеу.
vsz_limit = $ Default_vsz_limitМакс. IMAP процестерінің саны (қосылымдар)
process_limit = 1024Макс. POP3 процестерінің саны (қосылымдар)
process_limit = 1024Макс. SMTP жіберу процестерінің саны (байланыстар)
process_limit = 1024auth_socket_path Әдепкі бойынша осы UserDB ұясына нұсқайды. Әдетте
DoveCot-LDA, Doveadm, мүмкін IMAP процесі және т.б. қолданған. ПайдаланушыларОсы розеткаға толық рұқсаттар барлық пайдаланушы аттарының тізімін ала алады және
Барлығының USORDB іздеу нәтижелерін алыңыз.Әдепкі 0666 режимі ешкімге розеткаға қосуға мүмкіндік береді, бірақ
# UserDB іздеу тек UserDB «UID» өрісін қайтарса ғана сәтті болады
# Қоңырау шалушы процестің uid сәйкес келеді. Егер қоңырау шалушының UID немесе GID сәйкес келсе
# розетканың UID немесе GID іздеңіз. Басқа нәрсе сәтсіздікке әкеледі.
#
# Қоңырау шалушыға барлық пайдаланушыларды іздеуге толық рұқсаттар беру үшін, режимді орнатыңыз
# 0666-дан басқа нәрсе және DoveCot ядросын қолдануға мүмкіндік береді
# Рұқсаттар (мысалы, 0777 Барлығына толық рұқсат беруге мүмкіндік береді).
# Authoreer процесі әдепкі бойынша түбір болып табылады, сондықтан ол қол жеткізе алады
# / etc / көлеңкесі. Егер бұл қажет болмаса, пайдаланушыны өзгерту керек
# $ default_internal_user.
# Пайдаланушы = түбір
# Егер прокси қолданылса, пошта процестері розеткаға кіруі керек.
# Мысалы: MODE = 0660, Group = vmail және vmail және global mail_access_groups = vmail
# режимі = 0600
# Пайдаланушы =
# Топ =
# Тағы бір рет, сіз таңдаған доменмен доменді барлық осы файлдарда, AlmMebabe.com-дағы барлық файлдарда ауыстырыңыз. Келесі файлды өңдеңіз, DoveCot Config,
# nano config / etc_dovecot_dovecot
# Және осы сызықтарды қосыңыз
# ## Dovecot конфигурация файлы
# Егер сіз асығыс болсаңыз, http://wiki2.dovecot.org/quickConfiguration бөлімін қараңыз
# «Doveconf -n» командасы өзгертілген параметрлердің таза шығуын береді. Оны қолданыңыз
# көшіру мен қоюдың орнына; DOUCOT тарату тізіміне орналастырылған кезде файлдар.
# '#' таңбасы және оның бәрі түсініктеме ретінде қарастырылғаннан кейін бәрі. Қосымша бос орындар
# және қойындылар еленбейді. Егер сіз осыған ұқсас нәрсені қолданғыңыз келсе, оны салыңыз
# Баға ішіндегі мәндер, мысалы: мысалы: Кілт = «# char and char and chars»
# Көптеген (бірақ бәрі бірдей) параметрлерді әр түрлі протоколдар және / немесе
Бөлімдер ішіне параметрлерді қою арқылы # көз / тағайындалған IPS, мысалы:
# протокол IMAP {}, жергілікті 127.0.1 {}, қашықтан 10.0.0.0/8 {}
# Әдепкі мәндер әр параметр үшін көрсетіледі, оған сәйкес келмейді
# Бұл. Бұл осыған байланысты ерекшеліктер, бірақ бөлімдер жоқ (мысалы, аттар кеңістігі {})
# немесе плагин параметрлері әдепкі бойынша қосылады, олар тек мысал ретінде келтірілген.
# Жолдар сонымен қатар теңшеуге негізделген нақты дефолтпен мысалдар болып табылады
# Опциялар. Мұнда тізімделген жолдар конфигурациялауға арналған --Prefix = / usr
# --sconfdir = / etc --localstatedir = / var
# Орнатылған протоколдарды қосыңыз
! «/ Жұлдыздар / сызық /protocols.d/*.protocol
# ОПС немесе Хосттардың үтірмен бөлінген тізімі, олар қосылымдар үшін тыңдау керек.
# «*» барлық IPv4 интерфейстерінде тыңдайды, «::» IPv6 интерфейстерінің тізімін береді.
# Егер сіз әдепкі емес порттарды немесе одан да кешенді көрсеткіңіз келсе,
# Conf.D / master.conf өңдеңіз.
#listen = *, ::
# Базалық каталог, жұмыс уақыты деректерін сақтау керек.
#base_dir = / var / run / dovecot /
# Осы дананың аты. Көп данадан Doveadm және басқа командаларда орнату
# пайдалана алады --i қай дананы пайдалануды таңдау үшін (балама)
# -C -C). Сарананың атауы Dovecot процестеріне де қосылады
# PS шығысында.
#instance_name = DoveCot
# Клиенттерге сәлемдесу туралы хабарлама.
#login_greeting = Dovecot дайын.
# Кеңістікті бөлінген желілік желілердің тізімі. Отарлардан байланыс
# IPS-ке олардың IP мекенжайлары мен порттарын жоққа шығаруға рұқсат етіледі (журнал жүргізу үшін және
Түпнұсқалық растама үшін # үшін). Discome_playext_auth, сондай-ақ еленбейді
# Бұл желілер. Әдетте сіз өзіңіздің IMAP прокси серверлерін осы жерден көрсетесіз.
#login_trusted_networks =
# Кіру розеткаларының бос орын тізімі (мысалы, tcpwrap)
#login_access_sockets =
# Proxy_Maybe = Иә, егер прокси тағайындау осы IPS-тің кез-келгеніне сәйкес келсе, жасамаңыз
# Прокси. Бұл әдетте қажет емес, бірақ егер баратын жер қажет болса
# IP - бұл e.g. Жүктеме теңгелерінің IP.
#auth_proxy_
# Толығырақ Толығырақ Толығырақ Тақырыптар (PS). Қазіргі уақытта пайдаланушының атын және
# IP мекен-жайы. IMAP процестерін кім пайдаланатынын көруге пайдалы
# (мысалы, ортақ пошта жәшіктері немесе бірнеше тіркелгі үшін бірдей UID пайдаланылады).
#VERBOSE_POCTITLE = жоқ
# Dovecot Master Process сөнген кезде барлық процестер өлтірілуі керек.
# Мұны «Жоқ» деп белгілеу DOVECOT-ты жаңартып отыруға болатындығын білдіреді
# Клиенттік қосылымдарды жабу үшін мәжбүрлеу (дегенмен де)
# Егер жаңарту E.G болса, проблема. қауіпсіздікті түзетуге байланысты).
#shutddown_clients = иә
# Нөл болмаса, Doveadm серверіне көптеген қосылымдар арқылы пошта командаларын іске қосыңыз,
# оларды тікелей бірдей процессте орындаудың орнына.
#Doveadm_worker_count = 0
# Unix розеткасы немесе хосты: Doveadm серверіне қосылу үшін пайдаланылатын порт
#Doveadm_socket_Path = DoveadM-сервер
# Довекотта сақталған қоршаған орта айнымалыларының тізімі
# Іске қосу және оның барлық балалар процестеріне жіберілді. Сіз сондай-ақ бере аласыз
# Кілт = Мән жұптары Әрқашан нақты параметрлерді орнату үшін.
#import_environment = tz
##
## сөздік сервер параметрлері
##
# Сөздікті кілт = мәндер тізімдерін сақтау үшін пайдалануға болады. Мұны бірнеше рет қолданады
# плагиндер. Сөздікке тікелей немесе қарамастан да қол жеткізуге болады
# сөздік сервері. Төмендегідей ілмектер
# Сервер қолданылған кезде. Содан кейін оларды урс қолдану арқылы сілтеме жасауға болады
# «Прокси:».
дикталған {
#quota = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
}
# Нақты конфигурацияның көп бөлігі төменде көрсетілген. Файл аттары
# алдымен олардың ASCII мәні бойынша сұрыпталған және осы тәртіпте талданған. 00-префикстер
Файл атауларында тапсырыс беруді түсінуді жеңілдетуге арналған.
! conf.d / * қосыңыз.
# Конфигурация файлы қате жіберуге тырысуы мүмкін
# Табылған жоқ:
! local.conf қосыңыз
PassDB {
Драйвер = Passwd-file
Argts = / etc / dovecot / passwd
}
Userdb {
Драйвер = Passwd
}
Протоколдар = IMAP POP3
# Барлық енгізілген қосылымдарды тыңдау үшін DoveCot (IPv4 / IPv6)
Тыңдау = *, ::
DOVECOT конфигурациясы файлыЕгер сіз асығыс болсаңыз, http://wiki2.dovecot.org/quickConfiguration бөлімін қараңыз
«DOVECONF -N» командасы өзгертілген параметрлердің таза шығуын береді. Оны қолданыңызping femmebabe.com # Dovecot тарату тізіміне орналастырылған кезде файлдарды көшіру және қоюдың орнына.
«кейіпкер және одан кейін бәрі түсініктеме ретінде қарастырылған. Қосымша бос орындаржәне қойындылар еленбейді. Егер сіз осыған ұқсас нәрсені қолданғыңыз келсе, оны салыңыз
char and charing White кеңістігі »Көпшілігінің (бірақ бәрі бірдей) параметрлерді әр түрлі хаттамалардан және / немесе / немесе
Source / Destance is параметрлерін бөлімдер ішіне орналастыру арқылы, мысалы:IMAP протоколы {}, жергілікті 127.0.0.1 {}, қашықтан 10.0.0.0/8 {}
Әдепкі мәндер әр параметр үшін көрсетіледі, оған сәйкес келмейдіsudo certbot --apache --non-interactive --agree-tos --domains <domain>.com --email <youremail>@gmail.com
Бұлар. Бұл осыған байланысты ерекшеліктер, бірақ бөлімдер жоқ (мысалы, аттар кеңістігі {})Немесе плагин параметрлері әдепкі бойынша қосылады, олар тек мысал ретінде келтірілген.
Жолдар сонымен қатар теңшеуге негізделген нақты дефолтпен мысалдар болып табыладыnano yourproject/settings.py
Опциялар. Мұнда тізімделген жолдар конфигурациялауға арналған --Prefix = / usr--sconfdir = / / etc --localstatedir = / var
Орнатылған протоколдарды қосыңыз# IPS немесе хосттардың үтірмен бөлінген тізімі, олар қосылымдар үшін тыңдау керек.
«*» барлық IPv4 интерфейстерінде тыңдайды, «::» барлық IPv6 интерфейстерінде тыңдайды.Егер сіз әдепкі емес порттарды немесе одан да күрделі нәрсені көрсеткіңіз келсе,
Conf.D / Master.Conf өңдеңіз.sudo nano /etc/apache2/sites-available/femmebabe-le-ssl.conf
Тыңдау = *, ::Негізгі каталог, жұмыс уақыты деректерін сақтау керек.
base_dir = / var / run / dovecot /ServerSignature Off
ServerTokens Prod
<IfModule mod_ssl.c>
<VirtualHost *:80>
Redirect permanent / https://femmebabe.com/
</VirtualHost>
<VirtualHost *:443>
ServerName femmebabe.com
ServerAdmin team@femmebabe.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/team/femmebabe/static
<Directory /home/team/femmebabe/static>
Require all granted
</Directory>
Alias /media/icons /home/team/femmebabe/media/
<Directory /home/team/femmebabe/media>
Require all granted
</Directory>
<Directory /home/team/femmebabe/femmebabe>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/team/femmebabe/femmebabe/wsgi.py
WSGIDaemonProcess femmebabe python-path=/home/team/femmebabe/ python-home=/home/team/femmebabe/venv header-buffer-size=100000000000 user=team
WSGIProcessGroup femmebabe
WSGIApplicationGroup %{GLOBAL}
<Directory /home/team/femmebabe/static>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} \.(css|webp|webm|gif|png|mp3|wav|jpeg|jpg|svg|webp)$ [NC]
RewriteCond %{HTTP_REFERER} !^https://femmebabe.com/media/.*$ [NC]
RewriteRule ^(.+?)/$ /media/$1 [F,L]
</IfModule>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/femmebabe.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/femmebabe.com/privkey.pem
Header set X-Frame-Options: "SAMEORIGIN"
Header set Access-Control-Allow-Origin "https://femmebabe.com"
TimeOut 60000
LimitRequestBody 0
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|webp|JPG|JPEG|wav|mp3|mp4|public|js|css|swf|webp|svg)$">
Header set Cache-Control "max-age=30, public"
</FilesMatch>
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName femmebabe.com
ServerAdmin team@femmebabe.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =femmebabe.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
</IfModule>
Бұл мысалдың атауы. Көп данадан Doveadm және басқа командаларда орнатуҚай дананы пайдалану үшін <instance_name> пайдалана алады (балама)
-c <conf_PATH>). Сарананың атауы Dovecot процестеріне де қосыладыsudo a2dissite 000-default-le-ssl
sudo a2dissite 000-default
sudo a2dissite default-ssl
PS шығысында.Instance_name = DoveCot
Клиенттерге сәлемдесу.sudo a2ensite femmebabe-le-ssl
sudo systemctl reload apache2
Кіру_геуі = Dovecot дайын.Кеңістікті бөлінген желілік желілердің тізімі. Отарлардан байланыс
IPS-ке олардың IP мекенжайлары мен порттарын жоққа шығаруға рұқсат етіледі (журнал жүргізу үшін жәнеcd projectname
source venv/bin/activate
python manage.py check
аутентификацияны тексеру үшін). Discome_playext_auth, сондай-ақ еленбейдіБұл желілер. Әдетте сіз өзіңіздің IMAP прокси серверлерін осы жерден көрсетесіз.
Lover_trusted_networks =nano venv/lib/python3.12/site-packages/django/apps/registry.py
Кіруге қол жеткізудің розеткаларының кеңістігі тізімі (мысалы, TCPWRAP)login_access_sockets =
Proxy_Maybe = Иә, егер ол осы IPS-тің кез-келгеніне сәйкес келсе, жасамаңыз # Прокси. Бұл әдетте қажет емес, бірақ егер баратын жер қажет болса
# IP - e.g. Жүктеме теңгелерінің IP.
# auth_proxy__
Толығырақ көрсету (PS). Қазіргі уақытта пайдаланушының атын жәнеIP мекенжайы. IMAP процестерін кім пайдаланатынын көруге пайдалы
(мысалы, ортақ пошта жәшіктері немесе бірнеше есептік жазба үшін бірдей UID пайдаланылады).python manage.py check
Verbose_proctitle = жоқDovecot Master Process сөнген кезде барлық процестер өлтірілуі керек.
Мұны «Жоқ» деп белгілеу DOVECOT-ты жаңартып отыруға болатындығын білдіреді # Қолданыстағы клиенттік қосылыстарды жабу үшін мәжбүрлеу (бірақ ол да болуы мүмкін
# Егер жаңарту E.G болса, мәселе. қауіпсіздікті түзетуге байланысты).
# Өшіру_клемдер = иә
Егер нөлге тең болмаса, Doveadm серверіне көптеген қосылымдар арқылы пошта командаларын іске қосыңыз,оларды тікелей сол процесте орындаудың орнына.
Doveadm_worker_count = 0sudo systemctl reload apache2
Unix розеткасы немесе хосты: Doveadm серверіне қосылу үшін пайдаланылатын портDoveadm_socket_Path = Doveadm-сервері
Довекотта сақталған қоршаған орта айнымалы тізімдеріІске қосу және барлық балалар процестеріне жіберілді. Сіз сондай-ақ бере аласыз
Кілт = Мән жұптары Әрқашан нақты параметрлерді орнату үшін.import_environment = tz
ip -6 addr
Сөздік сервер параметрлеріСөздікті кілт = мәндер тізімдерін сақтау үшін пайдалануға болады. Мұны бірнеше рет қолданады
плагиндер. Сөздікке тікелей немесе қарамастан да қол жеткізуге болады
Сөздік сервері. Төмендегідей ілмектерСервер қолданылған кезде. Содан кейін оларды урс қолдану арқылы сілтеме жасауға болады
«Прокси :: <аты>».квота = mysql: /etc/dovecot/dovecot-dict-sql.conf.ext
Нақты конфигурацияның көпшілігі төменде көрсетілген. Файл аттарыалдымен олардың ASCII мәні бойынша сұрыпталған және осы тәртіпте талданған. 00-префикстер
Файлдарда тапсырыс беруді түсінуді жеңілдетуге арналған.Конфигурация файлы да қате жіберместен қосылуға тырысуы мүмкін
Ол табылмады:Dovecot-қа барлық кіріс қосылымдарын тыңдауға мүмкіндік береді (IPv4 / IPv6)
DoveCot пайдаланушысына пароль қосыңыз:nano config / etc_dovecot_passwd
Команда: {Plain} YourPassword
Келесі, OpenDkim конфигурациясыnano config/etc_postfix_main.cf
nano config / etc_opendkim.confЖәне осы сызықтарды қосыңыз:
# Бұл қол қою және тексеру үшін негізгі конфигурация. Ол оңай болуы мүмкін # негізгі қондырғыға сәйкес келеді. OpenDkim.conf (5) және # /usr/share/doc/opendkim/examples/opendkim.conf.sample # Қол жетімді конфигурация параметрлерін құжаттау. Syslog иә SyslogSuccess иә #Logwhy жоқ # Жалпы қол қою және тексеру параметрлері. Debian-да, «бастап» тақырып # асырылған, өйткені ол көбінесе беделді жүйелер қолданатын жеке куәлік кілті # және осылайша біршама қауіпсіздікке сезімтал. Каноникликадан босаңсу / қарапайым Режимі Қосалқы домендер жоқ Овертуралар # Домен, селектор және кілт (міндетті). Мысалы, қол қоюды орындаңыз # «Example.com» доменіне арналған «Example.com» селекторы бар «2020» (2020 »(2020._ .DomainKey.example.com), # Жеке кілтті пайдалану /etc/dkimkeys/example.private. Көбірек түйіршікті # Орнату опцияларын /SR/Share/doc/opendkim/readme.opendkim ішінен табуға болады. Мысалға мысал #Ssemsector 2020 #KeyFile /etc/dkimkeys/Example.private # Дебянда, OpenDkim «OpenDkim» қолданушысы ретінде жұмыс істейді. 007 умаск қажет # Розеткаға артықшылықты емес розеткаға кіретін MTA бар жергілікті розетканы пайдалану # пайдаланушы (мысалы, постфикс). Сізге топқа «ПоштаFix» пайдаланушы қосу қажет болуы мүмкін # «OpenDkim» бұл жағдайда. UserID Opendkim Umask 007 МТА қосылымына арналған # розетка (міндетті). Егер МТА Чрон түрмесінде болса, # Розетканың қол жетімді болуын қамтамасыз ету керек. Дебянда, постфикс жұмыс істейді # groot / var / var / wart / postfix, сондықтан Unix ұясы болуы керек еді # Төмендегі соңғы жолда көрсетілгендей конфигурацияланған. # Жергілікті: /run/opendkim/opendkim.sock #Socket eet: 8891 @ localhost # Stocket eet: 8891 Розетка: / war/spool/postfix/opendkim/opendkim.sock Pidfile /run/opendkim/opendkim.pid # Реттеуден гөрі # хосттар, әдепкі болса, 127.0.0.1. Қараңыз Қосымша ақпарат алу үшін Opendkim (8) жұмыс бөлімі. # Интернетоттар # Сенім якоры DNSSEC-ке мүмкіндік береді. Debian-да сенімді якорь файлы беріледі # DNS-тамыр-мәліметтер пакеті бойынша. Trustanchorfile /usr/share/dns/root.key #Nameservers 127.0.0.1 # Карта домендері Мекенжайлардан хабарламаларға қол қою үшін пайдаланылған кілттерге Кішідентелген: /ETC/opendkim/Key.Table Қол қойылмайтын нақтырақ: /ETC/opendkim/Signing.tablibe # Ішкі хосттар жиынтығы, оның поштасына қол қою керек Ішкіхостс /etc/opendkim/trusted.hosts# Бұл қол қою және тексеру үшін негізгі конфигурация. Ол оңай болуы мүмкін
# негізгі қондырғыға бейімделген. OpenDkim.conf (5) және
# /usr/share/doc/opendkim/examples/opendkim.conf.sample
# Қол жетімді конфигурация параметрлерінің құжаттамасы.
# ЖОҚ
# Жалпы қол қою және тексеру параметрлері. Debian-да, «бастап» тақырып
# беделді, өйткені ол көбінесе беделді жүйелер қолданатын жеке куәлік
# және осылайша қауіпсіздікке сезімтал.
# Доменге, селекторға және кілтке қол қою (міндетті). Мысалы, қол қоюды орындаңыз
# «Example.com» домені үшін «2020» селекторы бар «2020» (2020._ .DomaNey.example.com),
# Жеке кілтті пайдалану /etc/dkimkimkys/example.private. Көбірек түйіршікті
# Орнату опцияларын /SR/Share/doc/opendkim/readme.opendkim ішінен табуға болады.
МысалСелектор 2020
Кілт -file /etc/dkimkeys/example.privatenano config/etc_postfix_master.cf
Дебянда OpenDkim қолданушы ретінде жұмыс істейді. 007 умаск қажетРозеткаға артықшылықты емес розеткаға қол жеткізетін MTA бар жергілікті розетканы пайдалану
пайдаланушы (мысалы, постфикс). Сізге топқа «ПоштаFix» пайдаланушы қосу қажет болуы мүмкін# Бұл жағдайда «Опендким».
# MTA қосылымының ұясы (міндетті). Егер МТА Чрон түрмесінде болса,
# Розетканың қол жетімді екендігіне кепілдік беру керек. Дебянда, постфикс жұмыс істейді
# / var / var / papool / постфикс, сондықтан Unix ұясы болуы керек еді
# Төмендегі соңғы жолда көрсетілгендей конфигурацияланған.
# Розетка: /run/opendkim/opendkim.sock
# Розетка: 8891 @ localhost
# Розетка: 8891
# Реттеуден гөрі қол қою үшін хосттар 127.0.0.1. Қараңыз
# Қосымша ақпарат алу үшін Opendkim (8) жұмыс бөлімі.
# Ішкіхосталар 192.168.0.05.0/16, 10.0.0.0.08, 182.16.0.0.0.0.02.2012.12
# Сенім якоры DNSSEC-ке мүмкіндік береді. Debian-да сенімді якорь файлы беріледі
# DNS-тамыр-мәліметтер пакеті бойынша.
# 127.0.0.1 аттары
# Мекенжайлардан хабарламаларға қол қою үшін пайдаланылатын кілттерге
# Поштасына қол қою керек ішкі хосттар жиынтығы
# nano config / etc_default_opendkim
# Және осы сызықтарды қосыңыз
# # ЕСКЕРТПЕ: Бұл ежелгі конфигурация файлы. Оны Opendkim қолданбайды
# SystemD қызметі. Тиісті конфигурация параметрлерін қолданыңыз
Оның орнына # /etc/opendkim.conf.
#
# Бұрын, әдепкі параметрлерді мына жерден өңдейді, содан кейін орындалады
# /lib/opendkim/opendkim.service.Service.Service.Service SystemD файлдарын ауыстыру үшін
# /etc/systemd/systemd/system/opendkim.service.d/override.conf және
# /etc/tmpfiles.d/opendkim.conf. Бұл мүмкін болған кезде, ол қазір
# Параметрлерді тікелей реттеу ұсынылады /etc/opendkim.conf.
#
# Daemon_opts = «»
# Var / var / war / war / wart / postfix / run / OpenDkim, Unix ұясын пайдалану үшін
Чрондағы # постфикс:
# Rundir = / var / SPOOL / PostFix / Run / OpenDrim
Rundir = / run / OpenDkim
#
# Балама розетканы көрсетпеу #
# Ескерту, бұл параметр OpenDkim.conf-тегі розетка мәнін жоққа шығарады
# Әдепкі:
Розетка = «Жергілікті: / /var/spool/postfix/opendkim/opendkim.sock»
# 54321 портындағы барлық интерфейстерді тыңдаңыз:
# Розетка = ust: 54321
# 12345 порттағы ілмекті тыңдаңыз:
# Розетка = ust: 12345 @ localhost
# 192.0.2.1-де тыңдаңыз, 12345 порттан:
# Розетка = ust: 12345@192.0.2.1
Пайдаланушы = OpenDkim
Топ = OpenDkim
PIDFILE = $ Rundir / $ name.pid
EXTREAFTER =
# Ескерту: Бұл ежелгі конфигурация файлы. Оны Opendkim қолданбайды
# Жүйелік қызмет. Тиісті конфигурация параметрлерін қолданыңыз
# орнына /etc/opendkim.conf орнына.
#
# Бұрын, әдепкі параметрлерді мына жерден өңдейді, содан кейін орындалады
# /lib/opendkim/opendkim.service.service.Service.Serveer.Anders файлдарды ауыстыру үшін
# /etc/systemd/systemd/system/opendkim.service.d/override.conf және
# /etc/tmpfiles.d/opendkim.conf. Бұл мүмкін болған кезде, ол қазір
# Параметрлерді тікелей өзгерту ұсынылады /etc/opendkim.conf.
#
# Daemon_opts = «»
# Unix ұясын пайдалану үшін / var / war / war / postfix / wront / opendkim немесе
# ХРОО-да постфикс:
# Rundir = var / var / wart / Postfix / run / OpenDkim
#
# Балама розетканы көрсетуге жарамсыз
# Мұны орнату OpenDkim.conf-тегі кез келген розетка мәнін жоққа шығарады
# Әдепкі:
# 54321 портындағы барлық интерфейстерді тыңдаңыз:
# Розетка = ust: 54321
# 12345 порттағы ілмекті тыңдаңыз:
# Розетка = ust: 12345 @ localhost
# 192.0.2.1 порттан 12345 порциясын тыңдаңыз:
# Розетка = ust: 12345@192.0.2.1
# Біз Postfix серверімізді орнатуға дайын болсаңыз, біз төмендегі кодты енгіземіз, тиісті домен атауымен енгізіледі. Сценарий жасаудан бастаңыз
# Сценарийлер / ПоштаFixSetup түймесін түртіңіз
sudo chmod a + x сценарийлері / PostFixSetup
Nano сценарийлері / PostFixSetup
# Енді, Nano, Nano-да осы файлды өңдеңіз, сондықтан ол файлды өңдеңіз, сондықтан ол FEMMEBABE.com орнына домен атауын қамтиды.
# #! / bin / bash
# Орнату постфиксі
CD $ Dir
«Пошта қызметтерінің конфигурациясы» жаңғырығы
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.backup
sudo cp config / etc_postfix_main.cf /etc/postfix/main.cf
sudo cp config / etc_postfix_master.cf /etc/postfix/master.cf
sudo cp config / etc_default_opendkim / etc / default / OpenDkim
sudo cp config / etc_dovecot_conf.d_10-auth.conf /etc/dovecot/conf.d/10-auth.conf
sudo cp config / etc_dovecot_conf.d_10-master.conf /etc/dovecot/conf.d/10-master.conf
sudo cp config / etc_dovecot_dovecot.conf /etc/dovecot/dovecot.conf
sudo cp config / etc_dovecot_passwd / etc / dovecot / passwd
sudo cp config / etc_opendkim.conf /etc/opendkim.conf
sudo cp config / etc_default_opendkim / etc / default / OpenDkim
Sudo Adduser постфиксі OpenDkim
Sudo Mkdir / etc / OpenDkim
Sudo Mkdir / ETC / OpenDkim / Keys
Судо MKDir /ETC/opendkim/Keys/femMebabe.com
Sudo Mkdir / Var / SPOOL / PostFix / OpenDkim
sudo echo »*@femmebabe.com sendonly._domainkey.femmebababe.com | sudo tee -a -a /etc/opendkim/signing.table
Судо жаңғырығы «Sendonly._DomaNey.FemMeBababe.com fonmmebababe.com/sEndonly:/etc/opendkim/keys/femmebababababe.com/sendonly.private» | sudo tee -a -a /etc/opendkim/Key.Table
Судо жаңғырығы «127.0.0.1» | sudo tee -a -a /etc/opendkim/trusted.hosts
Судо жаңғырығы «Localhost» | sudo tee -a -a /etc/opendkim/trusted.hosts
Судо жаңғырығы «» | sudo tee -a -a /etc/opendkim/trusted.hosts
Судо жаңғырығы «* .femmebabe.com» | sudo tee -a -a /etc/opendkim/trusted.hosts
Sudo Chown -r OpenDkim: OpenDkim / etc / OpenDkim
Sudo Opendkim-genkey -B -B -B -B 2048 -D fonmebabe.com -d -d /etc/opendkim/femmebababe.com-es sendonly -v
Sudo Chmod Go-RW / ETC / OpenDkim / Keys
Судо Чаун Опендким: OpenDkim /etc/opendkim/kyys/femmebababe.com/sendonly.private
Sudo Chown OpenDkim: ПоштаFix / var / SPOOL / Postfix / OpenDkim
CD $ Dir
Sudo CP пошта жәшігі / * / var / mail /
Судо Чоун: Пайдаланушылар / var / mail / *
sudo chmod -r a + rwx / var / mail / *
Sudo SystemCTL OpenDkim Postfix DoveCot
Sudo Cat /ETC/opendkim/Keys/femMebabe.com/sendonly.txt | TR -D '\ n' | SED's / \ s // g '| SED's / «» // g '| AWK -F '[) (]' '{{$ 2}'
# ! / bin / bash
# Постфикс орнату
# Енді, оффикс, OpenDkim және DoveCot-ты теңшеу үшін аяқталған сценарийді іске қосыңыз.
# ./scripts/postfixSetup
# Осы сценарий іске қосылғаннан кейін, соңғы жолды көшіріп, оны DNS конфигурацияңызға Sendonly._DomaNey мәні ретінде орналастырыңыз. Бұл қауіпсіз поштаны жіберу кезінде доменді анықтау үшін қолданылатын OpenDkim кілті.
# Керемет! Бірнеше күн ішінде сіз серверден поштаны дұрыс конфигурацияланған жағдайда жібере аласыз.
# Егер сіз тек DNS-ті пошта серверіңіз үшін теңшеген болсаңыз, ол жаңарту үшін жазбалар үшін 72 сағаттан аз уақыт алуы керек. Бұл әдетте тезірек. Сіздің серверіңіздің осы пәрменді пайдалану арқылы жұмыс істейтінін тексере аласыз, электрондық поштаңызды жеткізіңіз:
# Эхо «Тест» | «Электрондық пошта» пошта-телефондары
# Егер бәрі дұрыс жұмыс істесе, сіз өзіңіздің серверіңізбен электрондық поштаны жібере аласыз. Егер ол жұмыс істемесе, қатенің не болуы мүмкін екенін көру үшін журналдарға қарап көріңіз.
# құйрық-сызаттар 150 / var/log/mail.log
# Бұл сервер жіберетін және оның дұрыс жұмыс істеп жатқандығы туралы ақпарат туралы ауызша ақпаратты ұсынады. Сіз өзіңіздің кіріс жәшігіңіздегі электрондық поштаны көре білуіңіз керек, ал егер ол болмаса, спам қалтасын тексеріңіз.
# Сондай-ақ, параметрлеріңізді параметрлеріңізде теңшеу керек. Осы жолдарды параметрлерде қосыңыз немесе ауыстырыңыз
# Email_host = домен
Email_port = 587
Email_use_tls = шын
Email_address = 'Team@femMebabe.com'
Email_host_user = 'Team' #'love@mamasheen.com '
Email_host_password = config ['email_host_password']
Default_from_email = '{} <{}>'. Пішімдеу (Сайт_NAME, email_host_User)
# 'Love@mamasheen.com'
# Құпия сөзді алу үшін конфигурация файлын қолданатынымызды хабарлаңыз. Бұл файлды файлдың басында, параметрлерде жүктейік.
# ОС импорттаңыз
JSON импорт
# Ашық және жүктеу конфигурациясы
Ашумен ('/ etc / config.json') config_file ретінде:
config = json.Load (config_file)
# Конфигурацияны ашу және жүктеу
# Бұл файлды жасап, оған құпия пернені, сонымен қатар құпия сөзді қосыңыз. Құпия кілтті құру үшін осы пәрменді қолданыңыз, оның соңында қандай ұзындықпен қолданыңыз:
# OpenSl Rand -Base64 64
# Енді OpenSl құрастырылған және өңдейтін мәтінді көшіріңіз / bultc/config.json
# sudo nano /etc/config.json
# Файлға келесі жолдарды қосыңыз, ол құпия перне ретінде пайда болатын кілтпен.
# {
«SERC_KEY»: «XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-OpenSSL)»,
«Email_host_password»: «YourPassword»
}
# JSON форматы қарапайым және қолдануға оңай, біз өз жобамызда пайдаланғымыз келетін басқа кілттерді де, оларды біздің жоба каталогынан бөлек, басқа пайдаланушылар өздеріне жаза алмаймыз, сондықтан оларды жобалық каталогтан оқуға болмайды. Бұл API пернелері үшін ұсынылады, оның ішінде біз бірнеше рет қолданамыз.
# Бәрі сақталғанына көз жеткізу үшін сіз өзіңіздің жобаңыздың сақтық көшірмесін жасағыңыз келеді және сіз енді серверді жалға бергіңіз келсе де, жұмысыңызды қалпына келтіре аласыз.
# Судо сақтық көшірмесі
# Енді веб-серверден HTML электрондық поштасын жіберіп көріңіз, ол пәрмен жолынан біреуі жұмыс істейді. Қабықшадағы пайдаланушы данасын сұраңыз және Django арқылы HTML электрондық поштасын жіберіңіз. Менің атымды кодта, Шарлотта, логинге өзгертіңіз.
# Python.py Shell басқарады
django.contrib.auth.models пайдаланушыны импорттау
U = user.objects.get (Пайдаланушы аты = 'charlotte')
users.email импорттауынан Send_welcome_email
Send_welcome_email (U)
Шығу ()
# Егер бірінші команда жұмыс істемесе, қолданғаныңызға көз жеткізіңіз
# Venv / Bin / Activate көзі
# Бәрі дұрыс орнатылған жағдайда, енді сіздің веб-қосымшаңыз жіберілген пошта жәшігіндегі сәлемдесу электрондық поштасын аласыз. Жақсы жұмыс! Сіз ұзақ жолға келдіңіз.
# Егер сіз осыған ұқсас кез-келген қателіктермен күрескен болсаңыз, қосқым келді, егер сіз осыған ұқсас кез-келген қателіктермен күресіп жатсаңыз, жауап іздеуден тартынып, көмек сұраңыз. Google, басқа іздеу жүйелерінің арасында бағдарламалау көмегін іздеу үшін тамаша ресурстар болып табылады. Сіз алған қатені іздеңіз, және сіз басқа адамдардың мәселені қалай шешетінін көре аласыз. Сонымен қатар, сіз маған хабарласыңыз, сіздің оқытушыларыңыз (оқытушыларыңыз, профессорлар, оқытушылар), Интернеттегі кез-келген құрдастер, бағдарламалауға арналған анықтамалық немесе сіз бастан кешірген мәселелердің шешімдерін табу үшін осы кітапқа немесе басқа ресурстарға хабарласыңыз. Мен мұны түсінемін, бірақ егер сіз осыдан оқыған болсаңыз және кез-келген код жазбасаңыз, сіз Web App құрылғысы туралы көп нәрсе білесіз. Өзіңізді артқы жағынан шығарып, сіз керемет жұмыс жасайсыз.
# Осы үшінші басылымның веб-даму нұсқаулығын оқуға уақыт бөлгеніңіз үшін рахмет. Болашақта басылымдарда маған құжаттың басында талқыланған маңызды мысалдар бар және біз бағдарламалық жасақтама мен аппараттық құралдарды дамыту әлеміне де терең енеміз. Не болып жатқан нәрсеге бейімделіңіз, және мен сізді керемет бағдарламалық жасақтаманы қалай құруды асыға күтемін. Келесі шығарылымда кездескенше!
# Осы сілтемеге барыңыз (бұл сізді Lotte Harper-тен тыс жерде алады)
nano config/etc_default_opendkim
nano config/etc_dovecot_conf.d_10-master.conf
nano config/etc_dovecot_dovecot
nano config/etc_dovecot_passwd
team:{plain}yourpassword
nano config/etc_opendkim.conf
nano config/etc_default_opendkim
touch scripts/postfixsetup
sudo chmod a+x scripts/postfixsetup
nano scripts/postfixsetup
./scripts/postfixsetup
echo "test" | mail -s "Test Email" youremail@gmail.com
tail –lines 150 /var/log/mail.log
openssl rand -base64 64
sudo nano /etc/config.json
{
"SECRET_KEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-generated-using-openssl)",
"EMAIL_HOST_PASSWORD": "yourpassword"
}
sudo backup
python manage.py shell
from django.contrib.auth.models import User
u = User.objects.get(username='Charlotte')
from users.email import send_welcome_email
send_welcome_email(u)
exit()
source venv/bin/activate
https://glamgirlx.com/kk/practical-web-based-deep-learning-and
https://glamgirlx.com/kk/practical-web-based-deep-learning-and -
Осы мекен-жай бойынша маған Bitcoin-ді қалдырыңыз: 3KhDWoSve2N627RiW8grj6XrsoPT7d6qyE