من برنامه نویس پایتون هستم و به دنیای برنامه نویسی علاقه ی بسیاری دارم.
شروع مقدماتی برای Python Flask با کاپیتان کد (3)
سلام.
بعد از مدت زیادی دوباره اومدیم با کایپتان کد، قسمت سوم از سری شروع مقدماتی برای Python Flask
جلسه ی قبلی اومدیم و این دو کار رو یاد گرفتیم:
- استفاده از Template ها و ریختن قالب در فایل جداگانه
- مبحث Static و استفاده از استایل جداگانه
توی این قسمت می خواهیم در مورد این ها صحبت کنیم:
- استفاده از Url variables
- انجام عملیات redirect یا تغییر مسیر
شاید این ها به ظاهر ساده بیان ولی به وقتی واردشون بشید، جالب میشه!
بریم که شروع کنیم ...
یکی از قابلیتی که فلسک داره اینه که ما می تونیم یک قسمتی از ادرس route رو متغیر کنیم. این مثلا کجا ها استفاده می شه؟ الان می گم.
برای مثال این ادرس صفحه ی "همه ی مطالب" یک سایت هست:
https://example.com/posts/
ما می خواهیم کاری کنیم که اگر نام هر مطلب بعد / آخر قرار بگیرد اون مطلب از دیتابیس خونده بشه و به کاربر نمایش داده بشه. مثال:
https://example.com/posts/make-site-with-python
می تونیم برای همین مثال توی کدمون یک روت تعریف کنیم، فقط ما چون دیتابیس نداریم یک صفحه ی شبیه به صفحه ی مطالب ارسال می کنیم و عنوان رو توی اون قرار می دیم. یک لیست هم برای مطالبی که وجود دارند به صورت دستی تعریف می کنیم.
add to app.py:
@app.route('/posts/<post_name>')
def posts(post_name):
all_posts = ['make-site-with-python', 'how-to-make-cake', 'all-os-can-show-gui', 'captain code coding']
if post_name in all_posts:
post_name = post_name.replace("-", " ")
return render_template("posts.html", name=post_name, content=f"This is content of <b>{post_name}</b> post")
else:
return "Post Not Found!"
templates/posts.html:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="/static/styles/styles.css">
<title>{{ name }}</title>
</head>
<body>
<h1>{{ name }}</h1>
<p>
{{ content|safe }}
</p>
</body>
</html>
همونطور که دیدید از <> استفاده کردیم تا بتوانیم یک متغیر رو توی url بسازیم. بعد برای فانکشنِ روت، یک ورودی گرفتیم و از اون طریق نام مطلب رو بدست آوردیم. بقیه اش هم خیلی ساده و واضح هست. خودتون بلدید.
همه کد ها هر قسمت رو توی یک مخزن در گیت هاب ذخیره کردم. می تونید از قسمت انتخاب برنچ جلسه رو انتخاب کنید و پروژه رو تا توی اون قسمت ببینید.
انجام عملیات redirect یا تغییر مسیر
بیاین برای این موضوع قدم به قدم پیش بریم:
1) from flask import Flask, render_template, redirect, url_for
2) کاری کنیم که اگر مطلب مساوی با captain code coding بود، ما را به صفحه ی درباره بفرست.
@app.route('/posts/<post_name>')
def posts(post_name):
all_posts = ['make-site-with-python', 'how-to-make-cake', 'all-os-can-show-gui', 'captain-code-coding']
if post_name == all_posts[3]: # captain code coding
return redirect(url_for('about'))
elif post_name in all_posts:
post_name = post_name.replace("-", " ")
return render_template("posts.html", name=post_name, content=f"This is content of <b>{post_name}</b> post")
else:
return "Post Not Found!"
توضیحات: تابع redirect یک ادرس می گیره و ما رو به اون صفحه ریدایرکت می کنه. ولی ما برای اینکه کارمون نظم داشته باشه و بعد راحت تر باشیم، از url_for استفاده کردیم. در url_for نام روت توی برنامه مون رو میدیم و متغیر های url رو هم میدیم و برای ما یک ریدایریکت اساسی و خلاصه ... درست می کنه.
خودتون تست کنید!
بعدا در پروژه ها از این زیاد استفاده می کنیم برای مثال بخش ثبت نام یا ورود.
این قسمت هم به پایان رسید ...
همون طور که گفتم یک مخزن کد توی گیتهاب ساختم و کد های هر جلسه رو توی اون می گذارم. این پیشنهاد دوست عزیز امیرمحمد پوراسمی بود. می تونید این مخزن رو ⭐ کنید تا همیشه در دسترستون باشه.
اگر سوال یا پیشنهادی دارید می تونید توی نظرات مطرح کنید. اگر هم مطلب جاییش اشکال داشت باز هم همینطور. اگر مطلب رو دوست داشتید ❤️ و اگر می خواهید این دوره رو دنبال کنید، انتشارات کاپیتان کد رو دنبال کنید.
مطلبی دیگر از این انتشارات
ساخت لودینگ ساده و زیبا (HTML و CSS) با کاپیتان کد
مطلبی دیگر از این انتشارات
شروع مقدماتی برای Python Flask با کاپیتان کد (1)
مطلبی دیگر از این انتشارات
شروع مقدماتی برای Python Flask با کاپیتان کد (2)